Вопрос

На Другой вопрос, Джерри Гроб указано на следующее:

Это (вероятно) не очень связано с вашим вопросом, но while (!feof(fileptr)){ в значительной степени гарантированная ошибка.

Я подумал, что начну отдельный вопрос, так как этот комментарий несколько не по теме. Может ли кто -нибудь объяснить мне это? Это была первая программа, которую я писал в прямой C раньше.

Это было полезно?

Решение

Причина этого утверждения в том, что feof все еще (изначально) ложь, когда был достигнут конец файла - он становится верным только после первой неудачной попытки прочитать после конца файла.

Следовательно

char mychar;
while(!feof(fileptr))
{
    fread(&mychar, sizeof(char), 1, fileptr);
    fprintf(stderr, "The char is '%c'.\n", mychar);
}

Слишком много обработать один.

Правильным способом является проверка возвращаемого значения fread (или любая функция, которую вы используете для чтения) или, в качестве альтернативы, чтобы вызвать feof после функция, которая выполняет чтение. Например:

char mychar;
while(fread(&mychar, sizeof(char), 1, fileptr) > 0)
    fprintf(stderr, "The char is '%c'.\n", mychar);

Другие советы

Google находит это: http://www.drpaulcarter.com/cs/common-c-errors.php#4.2

В нем говорится: «Автор еще не видел, чтобы кто -либо из студентов использовал функцию FeOF () правильно!»

Подводя итог, файл c функционирует как fread а также fwrite В любом случае вернуть значения статуса, которые вы u003Cblink>не должен игнорироватьu003C/blink>. Анкет Проверка значения feof это один из тех, кто зажигает стабильную дверь после того, как лошадь уже сбежала.

Список часто задаваемых данных C имеет отвечать наряду с ответами на многие другие подобные вопросы:

В C конец файла обозначается только после того, как подпрограмма ввода пыталась прочитать и не удалась.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top