Endlosschleifen mit cin und numerischen Typfehlern verstehen
In einigen Programmierszenarien kann es zu Endlosschleifenverhalten kommen, wenn cin zur Eingabe von Zeichenfolgen verwendet wird während numerische Werte erwartet werden. Dieser Artikel befasst sich mit diesem Problem und bietet mögliche Lösungen.
Erklärung der Endlosschleife
Die von Ihnen bereitgestellte Schleife:
while (1) { cin >> ul_x1 >> ul_x2; cout << "ul_x1 is " << ul_x1 << endl << "ul_x2 is " << ul_x2 << endl; }
wird endlos iterieren, wenn Zeichen anstelle von Zahlen eingegeben werden. Dies liegt daran, dass cin, wenn es auf eine nicht numerische Eingabe stößt, in den Fehlerzustand wechselt und keine weiteren Eingabeaufforderungen mehr anfordert. Folglich bleibt die Schleife hängen, ohne dass eine Benutzerinteraktion möglich ist.
Erkennung nicht numerischer Eingaben
Um dieses Problem zu vermeiden, ist es wichtig, nicht numerische Eingaben zu erkennen. Ein einfacher Ansatz besteht darin, zu überprüfen, ob sich cin im Fehlerzustand befindet. Hier ist ein Beispiel:
if (cin.fail()) { cout << "ERROR -- You did not enter an integer"; // Clear the fail state and discard bad input cin.clear(); cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); }
Dieser Code prüft den Fehlerstatus, zeigt eine Fehlermeldung an und löscht den Fehlerstatus. Der Aufruf von cin.ignore() verwirft alle verbleibenden Zeichen im Eingabepuffer, die möglicherweise den Fehler verursacht haben.
Zusätzliche Überlegungen
Für komplexere Validierungsanforderungen gilt: Es kann von Vorteil sein, die Eingabe zunächst als Zeichenfolge zu lesen und dann zusätzliche Prüfungen durchzuführen, um sicherzustellen, dass sie dem erwarteten Format entspricht. Dies kann eine größere Flexibilität und Anpassung bei der Handhabung der Eingabevalidierung ermöglichen.
Das obige ist der detaillierte Inhalt vonWarum verursacht „cin' Endlosschleifen bei der Eingabe nicht numerischer Werte?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!