Форум программистов, компьютерный форум CyberForum.ru

Как детектировать EOF с fgets/gets - C++

Восстановить пароль Регистрация
 
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
22.09.2013, 14:12     Как детектировать EOF с fgets/gets #1
Проблема в определении:
Файл1:
строка1
строка2
EOF


Файл2:
строка1
строка2EOF


Если пытаться пробегать fgets() и сразу проверять, встретился ли EOF, то при чтении второго файла будет потеряна последняя строка. Если проверять не после fgets(), то в первом файле будет якобы две "строка2".
Вижу два варианта решения: в начало файла добавить linesCount или хранить две строки: одна - прошлая, вторая - текущая и сравнивать их, если одинаковы при EOF - не выводить. Оба решения мне не подходят.

Посимвольное чтение не подходит. Только gets/fgets
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2013, 14:12     Как детектировать EOF с fgets/gets
Посмотрите здесь:

как использовать getline и fgets? C++
C++ Детектировать ошибку
C++ Как ввести EOF с клавиатуры?
C++ Как использовать функцию fgets?
как поставить EOF? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zer0mail
2182 / 1865 / 187
Регистрация: 03.07.2012
Сообщений: 6,628
Записей в блоге: 1
22.09.2013, 15:03     Как детектировать EOF с fgets/gets #2
Приведи пример программы, где получается "две строки".
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
22.09.2013, 15:17  [ТС]     Как детектировать EOF с fgets/gets #3
В общем, решил проблему. fgets() возвращает NULL, если первый символ в строке - EOF и устанавливает флаг EOF, иначе указатель на считанную строку + устанавливает EOF (если в конце строки он). Так что проверить fgets() на NULL, если NULL, то break, иначе делаю ещё одну итерацию и выпрыгиваю из цикла с feof().
zer0mail
2182 / 1865 / 187
Регистрация: 03.07.2012
Сообщений: 6,628
Записей в блоге: 1
22.09.2013, 15:25     Как детектировать EOF с fgets/gets #4
Я обычно пишу примерно так:
C++
1
2
3
while (fgets(buf,100,file)) {
      i=strlen(buf); // в общем, обрабатываю строку
}
и проблемы, где именно сидит EOF нет
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.09.2013, 15:28     Как детектировать EOF с fgets/gets #5
Можно исполозовать fgets() в параметрах условных операторов. Для них EOF - это не false, поэтому будет работать нормально для обоих файлов.
Yandex
Объявления
22.09.2013, 15:28     Как детектировать EOF с fgets/gets
Ответ Создать тему
Опции темы

Текущее время: 17:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru