Warum muss ich Strg-D zweimal eingeben, um das Dateiende zu markieren?
char **query;
query = (char**) malloc ( sizeof(char*) );
int f=0;
int i=0,j=0,c;
while((c=getchar())!=EOF)
{
if(!isalpha(c))
continue;
if(f==1)
query=(char**) realloc(query,(i+1)*sizeof(char*));
query[i]=(char*) malloc(sizeof(char));
query[i][j]=c;
j++;
while( (c=getchar())!=EOF&&c!=' '&&c!='\t' )
{
query[i]=(char*) realloc(query[i],(j+1)*sizeof(char));
query[i][j]=c;
++j;
}
query[i][j]='\0';
printf("%s\n",query[i]);
if(c==EOF){
break;
}
++i;
f=1;
j=0;
}
Ich möchte, dass das obige Code-Snippet eine durch Leerzeichen und Tabulatoren getrennte Zeile von Zeichenfolgen liest, bis EIN EOF, aber es sind 2 EOFs erforderlich, um die Schleife zu beenden. Zeichenfolgen können auch nur aus alphabetischen Zeichen bestehen.
Ich kämpfe an ungefähr 2 Tagen. Bitte geben Sie ein Feedback.
BEARBEITEN: Wahrscheinlich ist der Grund, dass ich STRG + D drücke, nachdem ich die letzte Zeichenfolge geschrieben habe, nicht die Eingabetaste, aber jetzt drücke ich die Eingabetaste und dann STRG + D, es funktioniert wie erwartet. Aber wie kann ich es ändern, um es zu beenden, nachdem ich STRG + D einmal nach der letzten Zeichenfolge gedrückt habe?