Ich habe eine Frage, die dieser Frage auf stackoverflow std::cin.clear() fails to restore input stream in a good state etwas ähnlich ist, aber die dort angegebene Antwort funktioniert nicht für mich.Zurücksetzen des Zustands eines Datenstroms
Die Frage ist: Wie kann ich den Zustand eines Streams wieder auf "gut" zurücksetzen?
Hier ist mein Code, wie ich es versuche, aber der Zustand ist nie wieder gut eingestellt. Ich habe beide Zeilen getrennt ignoriert.
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;
}
In meinem Buch heißt es: clear (flag) setzt den angegebenen Zustand auf gültig. Ich interpretierte dies als: Löscht das angegebene Fehlerbit. Das ist dann falsch? – physicalattraction
Es ist nur 'clear()' um * alle * Flags zu löschen. Ein einzelnes Flag zu löschen ist etwas komplizierter (und nicht zu nützlich). Ich habe meiner Antwort einen neuen Teil hinzugefügt. –