Endlosschleife mit ungültiger Eingabe und cin
Bei Verwendung von cin zum Lesen von Eingaben kann eine Endlosschleife auftreten, wenn die Eingabe nicht von der ist erwarteter Typ. Dieses Problem tritt besonders deutlich auf, wenn versucht wird, Zahlen einzugeben, aber versehentlich Zeichen eingegeben werden.
Das Problem ergibt sich aus dem Fehlerstatus, den cin eingibt, wenn es auf eine ungültige Eingabe stößt. In solchen Szenarien fordert cin eine Eingabe auf, was zu einer Endlosschleife führt.
Um dieses Verhalten zu verhindern, besteht eine Lösung darin, zu überprüfen, ob sich cin im Fehlerzustand befindet. Wenn dies der Fall ist, wird der Fehlerstatus gelöscht und die fehlerhafte Eingabe mit cin.ignore() verworfen. Dadurch kann cin zu seinem normalen Betrieb zurückkehren und zu weiteren Eingaben auffordern.
if (cin.fail()) { cout << "ERROR -- Invalid input detected" << endl; cin.clear(); cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); }
Alternativ können Sie std::getline() verwenden, um die Eingabe als Zeichenfolge zu lesen und anspruchsvollere Validierungsprüfungen durchzuführen, bevor Sie es versuchen um es in eine Zahl umzuwandeln. Dieser Ansatz bietet mehr Flexibilität und ermöglicht eine komplexere Eingabevalidierung.
Das obige ist der detaillierte Inhalt vonWie verhindert man Endlosschleifen, die durch ungültige Eingaben mit „cin' verursacht werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!