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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
#1

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

22.09.2013, 14:12. Просмотров 548. Ответов 4
Метки нет (Все метки)

Проблема в определении:
Файл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
Посмотрите здесь:

Как детектировать присутствие пробела в строке? Regex - C++
пробовал по разному, всегда возвращает False std::regex_match(L"sd ", std::wregex(L"/()+/g")); // false std::regex_match(L"sd ",...

Как использовать функцию fgets? - C++
Люди прочитал тут про функцию fgets() но как то понять до конца не могу поясните плиз кто понимает и работал с ней уже... А нашел такую...

Как использовать getline и fgets? - C++
#include <iostream> #include <fstream> #include <string> using std::ofstream; using std::cout; using std::endl; using...

Как правильно работать с функциями gets() и fgets()? - C++
Подскажите, как правильно пользоваться ими? При использовании gets() компилятор выдает ошибку error: ‘gets’ was not declared in this scope ...

Как заменить функцию fgets на strlen и strcpy? - C++
while (fgets(s1, sz_line, fp)) //будет прочитано 120 символов { // считаем длину текущей строки , будет в j j = 0; while...

Fopen и fgets, не понимаю как с ними оперировать - C++
Получаю такую штуку как sentence из командной строки в виде C:\folder\name.txt, и хочу её вставить в fopen. Обычно пишут...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zer0mail
2330 / 1956 / 192
Регистрация: 03.07.2012
Сообщений: 7,013
Записей в блоге: 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
2330 / 1956 / 192
Регистрация: 03.07.2012
Сообщений: 7,013
Записей в блоге: 1
22.09.2013, 15:25     Как детектировать EOF с fgets/gets #4
Я обычно пишу примерно так:
C++
1
2
3
while (fgets(buf,100,file)) {
      i=strlen(buf); // в общем, обрабатываю строку
}
и проблемы, где именно сидит EOF нет
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2013, 15:28     Как детектировать EOF с fgets/gets
Еще ссылки по теме:

Как работает программа? В чем суть функции fgets? - C++
#include <iostream> #include <stdio.h> int main(int argc, char** argv) //кол-во аргументов, указатель на массив указателей на сами...

Детектировать ошибку - C++
#include <iostream> #include <windows.h> #include <ddk\ntapi.h> #include <ddk\winddk.h> #include <ddk\ntddk.h> using...

как поставить EOF? - C++
Ребят, подскажите пожалуйста. Итак, вот листинг программы. Если я открываю файл, созданный с помощью потока, все читается без проблем(я так...

Детектировать итератор произвольного доступа - C++
здравствуйте, нужно детектировать итератор произвольного доступа... это не работает: template< typename... > using void_t = void; ...

Как ввести EOF с клавиатуры? - C++
как ввести EOF c клавиатуры ?

Когда и как срабатывает eof() ? - C++
Программа: #include <Windows.h> #include <iostream> #include <fstream> #include <string> #include <iomanip> using...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 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
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru