Endlosschleifen mit cin verstehen, wenn der Typ nicht übereinstimmt
Bei Verwendung der cin-Funktion zum Lesen von Eingaben kann es zu einer Endlosschleife kommen, wenn die erwartete Eingabe vorliegt ist numerisch, aber stattdessen werden Zeichen eingegeben. Dies geschieht, weil cin fehlschlägt, wenn es auf eine nicht numerische Eingabe stößt und in den Fehlerzustand wechselt, wodurch verhindert wird, dass weitere Eingaben angefordert werden.
Ursachen einer Endlosschleife
In der bereitgestellter Code:
unsigned long ul_x1, ul_x2; while (1) { cin >> ul_x1 >> ul_x2; cout << "ux_x1 is " << ul_x1 << endl << "ul_x2 is " << ul_x2 << endl; }
Wenn eine ungültige Eingabe erfolgt, schlägt cin fehl und bleibt in diesem Zustand. Dadurch gelangt die Schleife nie wieder in den Block, in dem cin die Eingabe liest, was zu einer Endlosschleife führt.
Endlosschleifen verhindern
Um dieses Problem zu vermeiden, kann man validieren Eingabe mit dem Fehlerstatus von cin:
if (cin.fail()) { cout << "ERROR -- You did not enter an integer"; // Clear fail state and discard bad input cin.clear(); cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); }
Alternative: Stringbasiert Validierung
Für eine komplexere Validierung kann es hilfreich sein, die Eingabe als Zeichenfolge zu lesen, bevor bestimmte stringbasierte Prüfungen durchgeführt werden, um sicherzustellen, dass sie dem erwarteten Format entspricht.
Das obige ist der detaillierte Inhalt vonWarum verursacht „cin' Endlosschleifen mit Typkonflikten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!