Почему мне нужно дважды нажать Ctrl-D, чтобы отметить конец файла?

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;
}

Я хочу, чтобы приведенный выше фрагмент кода считывал строку строк, разделенных пробелами и символами табуляции, до ОДНОГО EOF, но для завершения цикла требуется 2 EOF. Также строки могут состоять только из буквенных символов.

Я борюсь около 2 дней. Пожалуйста, оставьте отзыв.

РЕДАКТИРОВАТЬ: Скорее всего, причина в том, что я нажимаю клавиши CTRL + D после того, как пишу последнюю строку, а не клавишу ввода, но теперь я нажимаю клавишу ввода, а затем CTRL + D, все работает как положено. Но как я могу изменить его, чтобы закончить после того, как я нажал CTRL + D один раз после последней строки?

Ответы на вопрос(3)

Ваш ответ на вопрос