cin.clear() nicht zurücksetzen cin-Objekt
Habe ich die folgende Schleife. Es sollte zahlen Lesen, bis EndOfFile
oder der Benutzer-input -999
int arr[100];
int index;
for (index = 0; index < 100; index++)
{
cin >> arr[index];
if (!cin)
{
cin.clear();
index--;
continue;
}
if (arr[index] == -999)
{
break;
}
}
Wenn der Benutzer die Eingabe einer ungültigen Sache, wie einige char
s, diese Schleife wird wiederholt, niemals ohne clear
ing den Status Fehler oder stoppen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach dem Aufruf
clear
müssen Sie auch irgendwie entfernen Sie die ungültige Eingabe aus dem stream. Hier ist eine Möglichkeit:Es ist, weil, wenn
cin
fehlschlägt, Lesen Sie die ungültige Eingabe, es bleibt dort in den Bach. Es muss entfernt werden, durch einige Mittel. Ich habe gerade gelesen und es ignorieren.Können Sie auch
ignore
als:was ist besser meiner Meinung nach Eingaben sind Raum getrennt (und wenn Sie nicht wollen, um untersuchen das ungültige Eingabe). Die online doc sagt:
1024
Zeichen oder wenn' '
gefunden wird. Allerdings kann ein Benutzer nicht input-Raum am Ende und der Eingang wird contiued zu 1024 Zeichen!1024
.'\n'
, und es funktionierte!std::numeric_limits<streamsize>::max()
statt1024
.[...] provided inputs are space separated
.