Ich würde gerne wissen, ob und warum seekg(0)
nicht die eofbit
eines Streams löschen soll. Ich bin an einem Punkt wo ich schon den ganzen Stream gelesen habe, also EOF
erreicht wurde (aber failbit
ist noch nicht gesetzt) und möchte mit seekg()
wieder in eine gültige Position gehen und ein paar Zeichen nochmal lesen. In diesem Fall scheint seekg(0)
mit dem eofbit
Satz "zu arbeiten", aber sobald ich versuche, vom Strom zu lesen, wird der failbit eingestellt. Ist diese Logik richtig oder ist meine Implementierung schlecht? Soll ich diesen Fall erkennen und das Eofbit manuell löschen (wenn das Failbit nicht gesetzt ist)?Warum seekg (0) den eof-Status des Streams nicht löschen?
EDIT:
Das folgende Programm von einem Leser unterschiedliche Resultate in meiner Implementierung gibt (. Mingw32-C++ exe (TDM-2 mingw32) 4.4.1):
#include <sstream>
#include <iostream>
#include <string>
int main() {
std::istringstream foo("AAA");
std::string a;
foo >> a;
std::cout << foo.eof() << " " << foo.fail() << std::endl; // 1 0
foo.seekg(0);
std::cout << foo.eof() << " " << foo.fail() << std::endl; // 0 0
foo >> a;
std::cout << foo.eof() << " " << foo.fail() << std::endl; // 1 0
foo >> a;
std::cout << foo.eof() << " " << foo.fail() << std::endl; // 1 1
}
Die Kommentare oben sind von dem Benutzer, der dieses Programm in seiner Implementierung ausprobiert hat. Ich erhalten diese Ergebnisse:
1 0
1 0
1 1
1 1
Ja, Sie müssen manuell den Zustand des Stroms zurückzusetzen. –
@Martin: Scheint der alte Standard gegen neue Standardausgabe zu sein. – Anonymous