Одна простая вещь, которую вы могли бы сделать, это проверить длину строки, считываемой с помощью fgets
. Символ новой строки в конце входной строки считается допустимым символом fgets
. Это означает, что длина тестируемой строки будет равна 1, если вы только что ввели новую строку. Итак, вы хотите переместить тест внутри цикла, а не пытаться проверить EOF вне цикла. Итак, ваш код должен выглядеть так:
#include <stdio.h>
#include <string.h>
int main(void) {
char input[1024];
while(fgets(input,1024,stdin)!=NULL) {
printf("%s", input);
if(strlen(input) == 1) {
printf("EOF\n");
break;
}
}
return 0;
}
Также обратите внимание, что для того, чтобы тест EOF заработал, вы не нажмете Enter, вместо этого вы отправите ключ конца файла, например, CTRL-D на linux, в свою программу. В этом случае у вас не будет теста strlen внутри цикла.