¿Por qué necesito escribir Ctrl-D dos veces para marcar el final del archivo?
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;
}
Quiero que el fragmento de código anterior lea una línea de cadenas separadas por espacios y tabulaciones hasta UNO EOF pero requiere 2 EOF para finalizar el bucle. Además, las cadenas pueden constar de caracteres alfabéticos solamente.
Estoy luchando en unos 2 días. Por favor, dar algunos comentarios.
EDITAR: Probablemente la razón es que presioné las teclas CTRL + D después de escribir la última cadena, no la tecla enter, pero ahora presioné Intro y luego CTRL + D, funciona como se esperaba. Pero, ¿cómo puedo cambiarlo para que termine después de que presioné CTRL + D una vez que seguí la última cadena?