Ho una domanda che è un po 'simile a questa domanda su StackOverflow std::cin.clear() fails to restore input stream in a good state, ma la risposta fornita non non funziona per me.Ripristino dello Stato di un flusso
La domanda è: come posso ripristinare lo stato di un flusso di 'buono' di nuovo?
Ecco il mio codice come provo, ma lo stato è mai messo a nuovo bene. Ho usato entrambe le righe separatamente.
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;
}
Nel mio libro si dice: clear (flag) imposta lo stato di condizione specificato su valido. Ho interpretato questo come: cancella il bit di errore specificato. Questo è sbagliato allora? – physicalattraction
È semplicemente 'clear()' per cancellare * tutti * i flag. Cancellare una singola bandiera è un po 'più complicato (e non troppo utile). Ho aggiunto una nuova parte alla mia risposta. –