Re: eof() и eofbit
От: Павел Кузнецов  
Дата: 18.08.03 09:02
Оценка: 2 (1)
Здравствуйте, Xwine, Вы писали:

X>
X> if(file->eofbit)
X>   file->clear(file->eofbit);
X>


Не совсем осмысленный фрагмент кода... Выражение file->eofbit эквивалентно выражению
std::ios_base::eofbit, результатом которого является значение соответствующей константы.
Т.е. использовать это выражение в качестве условия не слишком разумно. Далее... Выражение
file->clear(file->eofbit) устанавливает значение внутреннего флага состояния равным
std::ios_base::eofbit (плюс, потенциально, std::ios_base::badbit, но это к делу
не относится).

X> где fstream *file ;

X> так до if-a eofbit = 1 , а eof() — 0.
X> после if-a и eofbit и eof() равняются 1.
X> чем это вызвано ?

Естественно, после file->clear(file->eofbit) результатом file->eof() будет всегда
true, т.к. эта функция как раз и проверяет, не включен ли флаг std::ios_base::eofbit

Если ты хочешь проверить флаг конца файла и сбросить его, если он включен, делай так:

if (file->eof())
  file->clear(file->rdstate() & ~file->eofbit);


или просто:

if (file->eof())
  file->clear();


чего обычно бывает достаточно для "повседневных" нужд.

С другой стороны, приведенный фрагмент "проверки на конец файла" наталкивает на мысль,
что в коде работы с потоком есть и другие, аналогичные, ошибки. Может, приведешь более полный
фрагмент кода с циклом чтения из потока?..
Posted via RSDN NNTP Server 1.6 RC1
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.