помощью fgets читать построчно в файлах
Я понимаю, что fgets читает до EOF или новой строки.
Я написал пример кода для чтения строк из файла, и я заметил, что fgets выполняется больше, чем желаемое количество раз. Это очень простой файл с двумя пустыми строками, т. е. Я нажал enter один раз и сохранил файл.
ниже код:
fp = fopen("sample.txt","r");
while (!feof(fp)) {
fgets(line,150,fp);
i++;
printf("%s",line);
}
printf("%d",i);
почему цикл while выполняется три раза вместо 2, так как в файле есть только две пустые строки?
1 ответов
в вашем случае последняя строка, по-видимому, читается дважды, за исключением того, что это не так. Последний звонок fgets
возвращает NULL
чтобы указать, что конец файла был прочитан. Вы не проверяете это и снова печатаете старое содержимое буфера, потому что буфер не был обновлен.
обычно лучше не использовать feof
вообще и проверьте возвращаемые значения из f...
семейство функций:
fp = fopen("sample.txt", "r");
while (1) {
if (fgets(line,150, fp) == NULL) break;
i++;
printf("%3d: %s", i, line);
}
printf("%d\n",i);
функции feof
возвращает true после попытки прочитать дальше конец файла, который происходит только после вашего последнего (неудачного) вызова fgets
, который пытается прочитать at или, скорее, перед самым концом файла. Ответы в этом долго так пост подробнее объяснить.