bool ios::eof ( ) const;
По данным библиотеки,
Функция возвращает true, если флаг ошибки потока eofbit был
устанавливается предыдущей операцией ввода / вывода. Этот флаг установлен всеми стандартами
операции ввода при достижении конца файла в последовательности
связанный с потоком.
Я написал программу для запуска некоторых тестов:
int main(int argc, char *argv[])
{
ifstream ifs(argv[1]);
float f;
ifs >> f;
cout << ifs.eof() << endl; //check if eofbit set
ifs.close();
}
Я протестировал 2 файла, testcase1.txt и testcase2.txt.
testcase1.txt был сгенерирован в терминале с cat
, [Ctrl-D] использовался для завершения ввода:
[~/C++ $] cat > testcase1.txt
1.234[Ctrl-D]
testcase2.txt был сгенерирован в vim
, я открыл vim
и только что набрал 1.234
, а затем сохранил и вышел.
Результат теста
Результат теста с testcase1.txt
равен 1
, что означает, что eofbit
установлен,
[~/C++ $] ./a.out testcase1.txt
1
Результат теста с testcase2.txt
равен 0
,
[~/C++ $] ./a.out testcase2.txt
0
Я открываю оба testcase1.txt
и testcase2.txt
в vim
, они выглядят точно так же, тогда почему eofbit
не был установлен для testcase2.txt
?