Хотя другие ответы технически верны, я чувствую, что этот пример (1.5.2) и следующий (1.5.3) сбивают с педагогического уровня. Просто гуглите «Количество персонажей 1.5.2», и вы найдете много других, которые попались на этом примере, как и ОП. Причина, по которой это так сбивает с толку, заключается в том, что в тексте нет объяснения о том, как сгенерировать символ EOF в интерактивном режиме, а предыдущие примеры выводили результаты сразу после ввода «return». Таким образом, любой новичок в C мог бы предположить, что программа в 1.5.3 должна сделать то же самое ...
Я хотел бы предложить следующий альтернативный код, который дает ожидаемый результат:
#include <stdio.h>
#define EOL '\n'
main()
{
long nc;
int c;
nc = 0;
while ((c = getchar()) != EOF)
{
++nc;
if (c == EOL)
{
/* Print number of input characters (not including return character) */
printf("%ld\n", nc-1);
nc = 0;
}
}
}
Единственный элемент C, который еще не объяснен в тексте, - это оператор if
, который фактически будет объяснен в следующем разделе (1.5.3). Я надеюсь, что этот небольшой альтернативный пример поможет другим, кто увлекся оригинальным примером из книги K & R. Хорошим «Упражнением 1.7b» было бы изучить различия между двумя версиями и объяснить, что они выдают одинаковые результаты (прочитав о Ctrl D / Ctrl Z из других ответов).