Tengo una pregunta que es ligeramente similar a esta pregunta en stackoverflow std::cin.clear() fails to restore input stream in a good state, pero la respuesta proporcionada allí no funciona para mí.Restablecer el estado de un flujo
La pregunta es: ¿cómo puedo restablecer el estado de una secuencia a 'bueno' otra vez?
Aquí está mi código de cómo lo intento, pero el estado nunca vuelve a ser bueno. Usé ambas líneas ignorar por separado.
int _tmain(int argc, _TCHAR* argv[])
{
int result;
while (std::cin.good())
{
std::cout << "Choose a number: ";
std::cin >> result;
// Check if input is valid
if (std::cin.bad())
{
throw std::runtime_error("IO stream corrupted");
}
else if (std::cin.fail())
{
std::cerr << "Invalid input: input must be a number." << std::endl;
std::cin.clear(std::istream::failbit);
std::cin.ignore();
std::cin.ignore(INT_MAX,'\n');
continue;
}
else
{
std::cout << "You input the number: " << result << std::endl;
}
}
return 0;
}
En mi libro dice: clear (flag) establece el estado de condición especificado como válido. Lo interpreté como: borra el bit de error especificado. Esto es incorrecto entonces? – physicalattraction
Es simplemente 'clear()' borrar las banderas * all *. Borrar un solo indicador es un poco más complicado (y no demasiado útil). He agregado una nueva parte a mi respuesta. –