Endlosschleife bei der Eingabe eines Buchstabens anstelle einer Zahl
Wenn eine Zeicheneingabe anstelle einer Ganzzahl auftritt, fällt der bereitgestellte Code in eine Endlosschleife, während die Meldung angezeigt wird: „Die von Ihnen eingegebene Zahl ist negativ. Bitte geben Sie eine positive Zahl ein, um fortzufahren.“ Dies ist auf Folgendes zurückzuführen:
Problem:
Der Cin-Stream wird nicht ordnungsgemäß verarbeitet, wenn er auf eine ungültige Eingabe stößt (in diesem Fall ein Zeichen). Dadurch bleibt der Stream in einem fehlerhaften Zustand, der als „Failbit“-Flag bezeichnet wird.
Lösung:
Um dieses Problem zu beheben, führen Sie die folgenden Schritte aus:
Überprüfen Sie die erfolgreiche Eingabe beim Lesen der Zahl (unter Verwendung von cin mit dem Stream-Manipulationsoperator). >>):
while (!(cin >> num1)) { cout << "Incorrect input. Please try again.\n"; cin.clear(); cin.ignore(numeric_limits<streamsize>::max(), '\n'); }
Löschen Sie den Stream und ignorieren Sie die fehlerhaften Eingabezeichen, wenn cin fehlschlägt (mithilfe von „clear()“ und „ignore()“):
Durch die Implementierung dieser Schritte erkennt das Programm die ungültige Eingabe, löscht den Stream und fordert den Benutzer auf, eine positive Ganzzahl einzugeben, wodurch das Programm zugelassen wird um ohne Endlosschleife fortzufahren.
Das obige ist der detaillierte Inhalt vonWie verhindert man Endlosschleifen bei der Eingabe nicht-numerischer Werte in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!