Все функции ввода сообщат вам об окончании файла, когда файл будет завершен.Например:
#include <stdio.h>
int main(void) {
int count = 0;
while (getchar() != EOF)
++count;
printf("There were %d characters.\n", count);
return 0;
}
будет подсчитывать символы во входном потоке:
pax> ./testprog <testprog.c
There were 169 characters.
pax> echo -n hello | ./testprog
There were 5 characters.
Если вы используете fgets
(как видно из вашего обновления),это также позволяет легко обнаруживать:
#include <stdio.h>
static char buff[1000];
int main(void) {
int count = 0;
while (fgets(buff, sizeof(buff), stdin) != NULL)
++count;
printf("There were %d lines.\n", count);
return 0;
}
Запуск, который будет подсчитывать строки:
pax> ./testprog <testprog.c
There were 12 lines.
В обоих случаях вы видите конецфайл обнаружен правильно с использованием методов перенаправления ввода или канала.Если вы выполняете чтение кода из терминала, вам просто нужно указать конец файла, используя средства, предоставляемые вашей средой.
Обычно это CTRL-D в начале строкив UNIX-подобных операционных системах или CTRL-Z в начале строки для Windows:
pax> ./testprog
this has
two lines
<Ctrl-D pressed (I run Linux)>
There were 2 lines.