В качестве небольшого фона я довольно плохо знаком с языком программирования C и поэтому пытался проработать некоторые упражнения во втором издании руководства Кернигана и Ричи.Я действительно понимаю, что, возможно, смогу более кратко решить некоторые проблемы, используя стандартную библиотеку, но стараюсь максимально синхронизировать свой список полезных команд с книгой.
Если это делаетРазница: я компилирую исходный код в среде Windows XP с помощью Tiny C Compiler (TCC) и выполняю двоичные файлы в консоли XP (cmd.exe).
Проблема : обработкаEnd-of-File (EOF) characters
.Я собрал небольшой тестовый пример, чтобы проиллюстрировать проблему.Программа, кажется, обрабатывает символ EOF (частично).Я попытаюсь продемонстрировать проблему с примерами входов / выходов.
#include <stdio.h>
int main()
{
int character, count;
character = 0;
character = getchar();
for (count = 0; character != EOF; ++count)
{
character = getchar();
}
printf("Count: %d", count);
return 0;
}
Пример ввода 1: abcd^Z[enter]
(где ^ Z / CTRL + Z представляет символ EOF, а [ввод] представляет клавишу ввода.)
Пример вывода 1: Count: 4
(ожидает большего ввода или правильно завершается при ^ C / ^ Z [enter])
Пример ввода 2: abcd^Zefgh
Пример вывода 2: Count: 4
(ожидание большего ввода или правильное завершение при ^ C / ^ Z [enter])
Как отмечалось в обоих примерах, счетчик символов не выводится до тех пор, пока ^ C / ^Z [ввод] последовательность инициируется.Пока не инициировано, программа ожидает (и действительно обрабатывает) больше ввода.Однако, как отмечено в примере 2, когда программа встречает начальный ^ Z, она останавливает обработку этой строки ввода, ожидая большего ввода или возвращая правильный счет, если инициирована последовательность ^ C / ^ Z [enter].
Я не могу понять, почему программа только частично обрабатывает символ EOF.Мне кажется, что если он обрезает конец образца 2, то он также должен полностью выходить из цикла.Есть идеи, почему при распознавании символа EOF программа не сразу выводит текущий счетчик и завершает работу?