Здравствуйте, 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
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен