Programación General > C/C++

 [Solucionado] Cambiar state flag despues de un fail()

<< < (2/2)

Eternal Idol:
Ya esta, me costo pero encontre una forma de hacerlo funcionar, primero use ignore y iba sin problemas para la t, pero despues se me ocurrio cambiar la t por tx o xp1345, y ya no servia, al final me di cuenta de que lo que necesitaba era ignorar todo lo que habia y asi quedo:


--- Código: Text ---if(convertir1.fail()){  cerr<<"error"<<endl;  convertir1.clear();  convertir1.seekg(0, ios_base::end);  revisar = 0;} 
Usando seekg vamos hasta el final y en la siguiente pasada no da error si el dato es valido  :beer:

jorgelaprida:
Muchas gracias!!!!  
 
Yo creí en principio que podía hacerlo con flush(). Como flush() pertenece a ostream, pense que el error era no asignar el stream a un dispositivo de salida. Entonces cambié la linea 33:


--- Código: C++ ---cerr<<"error"<<endl;convertir1.flush();revisar=00;convertir1.clear(); 
por esta:


--- Código: C++ ---cerr<<"error"<<endl<<convertir1.flush();revisar=00;convertir1.clear(); 
y de paso me enteraba que había encontrado. Pero no funcionó. Se ve que flush() solo vacía el buffer, no el stream. Y fail() no es true hasta la próxima pasada en la que vuelve a leer el stream.

Realmente estaba atorado.

Otra pregunta al margen:
Uso el compilador gcc, si compilo con la opción "-Wall" es normal que no me avise que el flujo no esta asignado a nada, cuando usaba convertir1.flush().

Saludos.

jorgelaprida:
Otra forma de "limpiar" el stream es usando str()


--- Código: C++ ---if(convertir.fail())        {        cerr<<"error "<<endl;        convertir.clear(); //reseteo las states flags        convertir.str("");   //reseteo el stream sobreescribiendolo           revisarcoordenada = 0;        } 
Así también se resuelven los casos que nombro Eternal Idol. Todavía estoy tratando de resolver, cuando en el archivo aparecen errores del tipo "4tt", que el programa no lea solo 4 y yo no me de cuenta.

Saludos.

Navegación

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa