Otto: Verständnisproblem C++ ios_base::failbit

Beitrag lesen

Hi alle,

ich lese in einem C++ Programm aus einer Datei zeilenweise ein, um auf Fehler zu reagieren habe ich die Bitmaske für Exceptiones auf ios_base::failbit | ios_base::badbit gesetzt.

Am Ende der Datei wird immer eine Exception ausgelöst, aber warum? Das Bit für EOF ist doch nicht gesetzt. Setzte ich die Bitmaske nur auf ios_base::badbit läuft alles prima. In meinen Büchern finde ich nur das failbit für, die letzte Ein- oder Ausgabeoperation war fehlerhaft, steht. Kann das so nicht nachvollziehen, wäre schön wenn mir einer auf die Sprünge helfen kann.

Ich habe das ganz unter Linux mit dem gcc 4.3.1 übersetzt.  Hier mal mein Code:

  
int  
main ( int argc, char *argv[] )  
{  
	cout	<< "\nProgramm " << argv[0] << endl << endl;  
  
	  
	string ifs_file_name = "test.txt";		/* input  file name       */  
	ifstream	ifs;							/* create ifstream object */  
	ifs.exceptions( ios_base::failbit | ios_base::badbit );  
  
  
	ifs.open (ifs_file_name.c_str());		/* open ifstream          */  
	if (!ifs) {  
		cerr << "\nERROR : failed to open input  file " << ifs_file_name << endl;  
	  
	}  
  
	string line;  
	while ( getline(ifs, line)){  
		cout << line << endl;  
	}  
  
  
	ifs.close ();		/* close ifstream         */  
  
	return 0;  
}		// ----------  end of function main  ----------  

MfG
Otto