Пожалуйста, обратите внимание, что для правильного чтения текстового файла НЕ требуется использование функций eof (), good (), bad () или indifferent () (ОК, я сделал последний вверх). То же самое верно в C (с fgets (), feof () и др.). По сути, эти флаги будут установлены только ПОСЛЕ того, как вы пытались что-то прочитать, с помощью функции, подобной getline (). Намного проще и с большей вероятностью правильно проверить, что функции чтения, такие как getline (), действительно что-то читают напрямую.
Не проверено - я обновляю свой компилятор:
#include <iostream>
#include <fstream>
#include <string>
using namespacr std;
imt main() {
string filename;
getline( cin, filename );
ifstream ifs( filename.c_str() );
if ( ! ifs.is_open() ) {
// error
}
string line;
while( getline( ifs, line ) ) {
// do something with line
}
}