Programación General > C/C++
[Solucionado] Cambiar state flag despues de un fail()
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
[*] Página Anterior
Ir a la versión completa