Метод eof
Метод eof класса ios возвращает true,
если при последнем чтении из потока был достигнут конец файла,
и false в противном случае. Метод не принимает параметров
и не изменяет состояние потока. Флаг eofbit устанавливается
автоматически, когда операция чтения пытается прочитать данные
за пределами конца файла. Важно понимать, что метод возвращает
true только после того, как была предпринята попытка чтения
за концом файла, а не в момент, когда был прочитан последний символ.
Синтаксис
bool eof() const;
Пример
Давайте откроем файл и будем читать из него символы до тех пор, пока не достигнем конца файла. В цикле будем выводить каждый прочитанный символ:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ofstream out("test.txt");
out << "abcde";
out.close();
ifstream in("test.txt");
char ch;
while (!in.eof())
{
in.get(ch);
if (!in.eof())
{
cout << ch;
}
}
cout << endl;
in.close();
return 0;
}
Результат выполнения кода:
"abcde"
Пример
Давайте проверим, что метод eof возвращает true
только после попытки чтения за концом файла. Прочитаем все
символы из файла и выведем состояние флага:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ofstream out("test.txt");
out << "12345";
out.close();
ifstream in("test.txt");
char ch;
for (int i = 0; i < 5; i++)
{
in.get(ch);
cout << "Read: " << ch << ", eof: " << in.eof() << endl;
}
in.get(ch);
cout << "After reading past end, eof: " << in.eof() << endl;
in.close();
return 0;
}
Результат выполнения кода:
"Read: 1, eof: 0"
"Read: 2, eof: 0"
"Read: 3, eof: 0"
"Read: 4, eof: 0"
"Read: 5, eof: 0"
"After reading past end, eof: 1"