Книга Б. Кернигана и Д. Ритчи "Язык программирования Си, издание 3-е, исправленное", CLion 2019.3.3, версия языка С99.
#include <stdio.h>
//подсчет количества вводимых символов
int main() {
double nc;
for (nc = 0; getchar() != EOF; ++nc)
;
printf("%.0f,", nc);
}
Автор книги говорит, что тело цикла пустым быть не может, и мы ставим точку с запятой. Но этот код работает некорректно. Ожидается, что он посчитает все введенные в строку символы и выведет это значение. Однако после ввода символов и нажатия Enter терминал больше ничего не выводит. Если же занести функцию printf в сам цикл for, терминал выводит значения (0, 1, 2, .., х), как и должно быть. У меня несколько вариантов, почему так происходит:
1. В том коде значение переменной nc работает только внутри цикла, а так как мы не присвоили переменной хотя бы ноль перед циклом, выводить нечего. (ибо через цикл while с прибавкой значения в конце тела цикла всё также не работает)
2. Значение константы EOF некорректно работает, и потому цикл не завершается
3. Что-то иное, чего я пока не знаю (я совсем новичок)