Me gustaría saber si y por qué se supone que seekg(0)
no borra el eofbit
de una secuencia. Estoy en un punto donde ya he leído toda la secuencia, así se ha alcanzado EOF
(pero no failbit
todavía está configurado) y quiero volver con seekg()
a una posición válida y leer algunos caracteres otra vez. En este caso, seekg(0)
parece "funcionar" con el conjunto eofbit
, pero tan pronto como intento leer de la secuencia, se establece el failbit. ¿Es esta lógica, correcta o es incorrecta mi implementación? ¿Se supone que debo reconocer este caso y borrar el eofbit manualmente (si el failbit no está configurado)?¿Por qué no seekg (0) borra el estado eof del flujo?
EDIT:
el siguiente programa proporcionado por un lector da resultados diferentes en mi aplicación (. 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
}
Los comentarios anteriores son del usuario que probó ese programa en su implementación. Puedo obtener estos resultados:
1 0
1 0
1 1
1 1
Sí, tiene que restablecer manualmente el estado de la corriente. –
@Martin: parece ser el viejo estándar frente a un nuevo problema estándar. – Anonymous