Почему мне нужно дважды нажать 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 один раз после последней строки?