Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2009, 22:59   #1
alex8
 
Регистрация: 04.05.2009
Сообщений: 9
По умолчанию проблема с std::ifstream.eof()

Здравствуйте. Впервые на форуме, не уверен, что правильно выбрал раздел. Тем не менее, спрошу. Объясните, пожалуйста, как работает ifstream.eof(). В MSDN написано, что она возвращает true при попытке прочитать несуществующий символ. Обычно так и есть. Но сегодня я столкнулся с тем, что она устанавливается в true после чтения последнего символа файла. Не понимаю, что происходит...
P.S. Естественно, файл открыт как двоичный.
Спасибо за помощь.
alex8 вне форума Ответить с цитированием
Старый 04.05.2009, 23:07   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

eof() возвращает true, когда достигнут конец файла.
Правда, я несколько раз сталкивался с проблемой, при которой читался еще один лишний символ. Приходилось делать дополнительную проверку сразу после чтения.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 04.05.2009, 23:11   #3
alex8
 
Регистрация: 04.05.2009
Сообщений: 9
По умолчанию

У меня в 90% случаев как раз читается лишний символ. Например, цикл while(!file.eof()) читает последний символ 2 раза. Но не всегда! Вот в чем проблема - я не знаю, конец это или еще не конец.
alex8 вне форума Ответить с цитированием
Старый 04.05.2009, 23:15   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
У меня в 90% случаев как раз читается лишний символ. Например, цикл while(!file.eof()) читает последний символ 2 раза. Но не всегда! Вот в чем проблема - я не знаю, конец это или еще не конец.
Да, интересно. Я делаю так в этом случае.
Код:
char c;
while(!fin.eof())
 {
  fin.get(c);
  if(fin.eof()) break;
  cout<<c;
 }
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 05.05.2009, 10:14   #5
alex8
 
Регистрация: 04.05.2009
Сообщений: 9
По умолчанию

А я делаю так:

Код:
fin.read(&ch, 1);
while (!fin.eof())
{
    process(ch);
    fin.read(&ch, 1);
};
Проблема в том, что ни то, ни другое не помогает. Значение eof, равное true, может означать, что был прочитан последний символ файла, а может - что была попытка прочитать несуществующий символ, и я не вижу способа определить, какая из ситуаций имеет место.

Последний раз редактировалось MaTBeu; 05.05.2009 в 16:59.
alex8 вне форума Ответить с цитированием
Старый 05.05.2009, 18:24   #6
alex8
 
Регистрация: 04.05.2009
Сообщений: 9
По умолчанию

Я был неправ, виноват. Я не заметил лишнее чтение, потому и решил, что eof() срабатывает преждевременно. Все работает как надо.
alex8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
std Викдон Общие вопросы C/C++ 3 17.02.2009 11:33
fstream.eof() в mingw alexinspir Общие вопросы C/C++ 1 30.09.2008 08:00
метод Close для ADODataSet вызывает ошибку 'BOF или EOF имеет ...' (mdac 6.0) jane БД в Delphi 1 16.07.2008 07:34
namespace std; lacost Общие вопросы C/C++ 8 22.10.2007 13:17
использование using namespace std; che Общие вопросы C/C++ 7 11.10.2007 17:13