End of file

Рейтинг: 1Ответов: 1Опубликовано: 22.03.2015

Доброй ночи.

Есть кусок кода, считывающий строки из файла:

while((i<num) && (!fin.eof()))
{
//что-то
//после каждой считанной строки из файла выводится выводится строка в консоль.
}

И есть файл, с таким содержанием (файл заканчивается в конце 5 строки, больше символов нет):

1 hello helo 0 0
2 hello helo 2 4
3 hello helo 4 8
4 hello helo 6 12
5 hello helo 8 16

При num=5 он считывает правильно все 5 строк, если n=6 и больше, то считывается еще что-то и выводит на 1 строку больше. Похоже, eof находит конец файла не в конце 5 строки, а в начале 6 О_о. В чем может быть ошибка?

В файл записывается строка с << endl; на конце.

Ответы

▲ 3

@Cookie, к сожалению, в фрагменте кода в своем вопросе Вы опустили собственно чтение из файла.

Скорее всего, после чтения строки (скажем, getline(fin, str)) Вы не проверяете, действительно ли прочли str, и выводите ее содержимое, а ведь конец файла реально обнаруживается при операции чтения, а вовсе не методом fin.eof(), который лишь проверяет ранее установленный признак конца файла.

Правильно читать N строк можно, например, так:

 while (i < num && getline(fin, str)) {
   i++;
   cout << str << endl;
   ...
 }