Endlosschleifenproblem im C-Programm, das Buchstaben als Ganzzahleingabe akzeptiert
Dieses Problem tritt auf, wenn das Programm eine Ganzzahleingabe erwartet, der Benutzer diese jedoch eingibt stattdessen einen Brief. Aufgrund eines unerwarteten Zeichens im Eingabestream gerät das Programm in eine Endlosschleife. Dies führt zu einer kontinuierlichen Anzeige der Meldung „Die von Ihnen eingegebene Zahl ist negativ. Bitte geben Sie eine positive Zahl ein, um fortzufahren.“ ohne dem Benutzer die Möglichkeit zu geben, eine gültige Nummer einzugeben.
Erklärung
Der zugrunde liegende Grund für dieses Problem liegt im Verhalten des C-Eingabestreams. Wenn der Benutzer ein nicht numerisches Zeichen eingibt, wird das „failbit“-Flag des Eingabestreams gesetzt. Der Stream wird jedoch nicht gelöscht, sodass das Programm in derselben Schleifeniteration hängen bleibt und wiederholt versucht, das ungültige Zeichen zu lesen.
Lösung
Um dieses Problem zu beheben ist es notwendig, eine ordnungsgemäße Eingabevalidierung und Fehlerbehandlung zu implementieren. Hier ist ein Beispiel, wie dieses Problem behoben werden kann:
#include <iostream> #include <limits> // ... (remaining code) cout << "\nPlease enter a positive number and press Enter: \n"; do { while (!(cin >> num1)) { cout << "Incorrect input. Please try again.\n"; cin.clear(); cin.ignore(numeric_limits<streamsize>::max(), '\n'); } if (num1 < 0) cout << "The number you entered is negative. Please enter a positive number to continue.\n"; } while (num1 < 0);
In diesem geänderten Code:
Das obige ist der detaillierte Inhalt vonWarum verursacht die Buchstabeneingabe eine Endlosschleife in meinem C-Programm?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!