Ich habe ein Problem mit dem folgenden Code. Ich benutze es in Xcode (OS X).Wie std :: cin zurücksetzen, wenn Sie es verwenden?
[mein erster Versuch dieser Code entfernt]
Wie Eingang Reset std :: cin? Ich versuche, andere Werte einzugeben, aber ich kann nicht, weil std :: cin nach meinem falschen Wert nicht mehr zu funktionieren scheint.
UPD2 In meinem zweiten Versuch ich diesen Code verwenden:
for (unsigned char i = 0; i < 5; i++) {
int value = 0;
std::cout << "\n>> Enter \"value\": ";
std::cin >> value;
if (std::cin.fail()) {
std::cin.clear();
std::cin.ignore();
std::cout << "Error: It's not integer value!\n";
} else {
std::cout << "The value format is ok!\n";
}
std::cout << "value = " << value << std::endl;
}
Hier habe ich gerade Eingang 5 Werte in einer Schleife. Jedes Mal, wenn ich es bei einem Fehler überprüfe. Wenn ich den falschen Wert ("asdf") setze, wird std :: cin verrückt und funktioniert nicht mehr. Ich erhalte diese Ausgabe:
>> Enter "value": 4
The value format is ok!
value = 4
>> Enter "value": 234
The value format is ok!
value = 234
>> Enter "value": asdfghjkl
Error: It's not integer value!
value = 0
>> Enter "value": Error: It's not integer value!
value = 0
>> Enter "value": Error: It's not integer value!
value = 0
234
234
78
345
657
345
dsf
f
Antwort @Galik aktualisiert –
'clear' der Fehlerzustand-Flags des löscht Strom. Es macht nichts mit den Charakteren. Und 'Ignorieren' ohne Argumente wird nur ein einzelnes Zeichen verwerfen, was bedeutet, dass wenn Sie' "asdf" 'eingeben, es 4 mal durchlaufen wird, und Ihnen sagt, dass Ihre Eingabe schlecht ist, bevor Sie es erneut eingeben können. Sie sollten 'std :: cin :: ignore (std :: numeric_limits :: max(), '\ n')' verwenden, um bis zum Ende der Zeile zu verwerfen. –
@BenjaminLindley - Ich habe ein Problem mit "std :: cin :: ignore". Ich benutze CLang und es scheint, es sollte std :: cin.ignore aber mit nur einem Parameter sein ... – JavaRunner