Vorrei sapere se e perché seekg(0)
non è in grado di cancellare lo eofbit
di un flusso. Sono in un punto in cui ho già letto tutto lo stream, quindi è stato raggiunto EOF
(ma non è stato impostato failbit
) e voglio tornare indietro con seekg()
in una posizione valida e leggere nuovamente alcuni caratteri. In questo caso, seekg(0)
sembra "funzionare" con il set eofbit
, ma non appena provo a leggere dallo stream, viene impostato il failbit. Questa logica è corretta o la mia implementazione è errata? Dovrei riconoscere questo caso e cancellare manualmente l'eofbit (se il failbit non è impostato)?Perché non seekg (0) cancella lo stato di eof di streaming?
EDIT:
Il programma segue fornita da un lettore dà risultati diversi a mia implementazione (. 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
}
Le osservazioni di cui sopra provengono dall'utente che ha provato quel programma nella sua implementazione. Ottengo questi risultati:
1 0
1 0
1 1
1 1
Sì, è necessario reimpostare manualmente lo stato del flusso. –
@Martin: sembra essere il vecchio standard rispetto al nuovo problema standard. – Anonymous