Из файла считывается лишний символ - C (СИ)
Формулировка задачи:
Разбираю система ввода-вывод C. При чтении из текстового файла содержащего символы "123" и выводе файла в консоль, пока не встретится конец (проверка функций feof()) получаю лишний символ.
Откуда, он мог возникнуть?
Решение задачи: «Из файла считывается лишний символ»
textual
Листинг программы
// --- допустим файл fp пуст ---
// пока не было попытки чтения значение !feof(fp) истинно
while(!feof(fp)) {
// файл пуст, fgetc вернёт EOF
putchar( fgetc(fp) ); // выведет EOF
// теперь !feof(fp) ложно, цикл завершится
}
Объяснение кода листинга программы
В данном коде на языке C выполняется следующая последовательность действий:
- Проверка на конец файла - используется функция
feof(fp), которая возвращаетtrue(1), если достигнут конец файла, иfalse(0), если это не так. Это позволяет проверить, пуст ли файл.- Пока значение
feof(fp)равноfalse(0), что означает, что в файле еще есть данные, выполняется следующий блок кода.
- Пока значение
- Чтение символа из файла - используется функция
fgetc(fp), которая считывает один символ из файла и возвращает его.- Значение, прочитанное функцией
fgetc(fp), выводится на экран с помощью функцииputchar().
- Значение, прочитанное функцией
- Проверка на конец файла после чтения символа - после чтения символа из файла, снова проверяется значение
feof(fp). Если оно равноtrue(1), значит, был достигнут конец файла, и цикл завершается. Таким образом, в цикле происходит последовательное чтение символов из файла до тех пор, пока не будет достигнут конец файла. Если файл пуст, то будет выведено несколько символов EOF.