Warum führt das Programm eine Endlosschleife aus, wenn ein Buchstabe anstelle einer Zahl eingegeben wird?
Beim Versuch, eine positive Ganzzahl in ein C-Programm einzugeben Geben Sie jedoch versehentlich einen Buchstaben ein, kann es zu einer Endlosschleife kommen. Dieses Verhalten ist darauf zurückzuführen, wie der Eingabestream cin Zeichen verarbeitet.
Wenn die Eingabe falsch ist (z. B. ein Buchstabe anstelle einer Zahl), setzt der cin-Stream das Failbit-Flag und belässt die falsche Eingabe im Puffer. Nachfolgende Versuche, eine Ganzzahl mit cin zu lesen, geben weiterhin die falsche Eingabe zurück, was zu einer Endlosschleife führt.
Um dieses Problem zu beheben, ist es wichtig, falsche Eingaben ordnungsgemäß zu behandeln, indem Sie auf Fehler prüfen und den Eingabepuffer löschen. Hier ist eine modifizierte Version des Codes, die Fehlerbehandlung umfasst:
#include <iostream> #include <limits> int main() { // Define variables int num1, num2, total; char answer1; do { // User enters a number cout << "\nPlease enter a positive number and press Enter: "; while (!(cin >> num1)) { cout << "Incorrect input. Please try again." << endl; 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." << endl; } while (num1 < 0); // Rest of the code goes here return 0; }
In diesem aktualisierten Code wird die while (!(cin >> num1))-Schleife ausgeführt, bis eine gültige Ganzzahl eingegeben wird. Wenn eine falsche Eingabe erkannt wird, wird eine Fehlermeldung angezeigt und der Eingabepuffer wird mit cin.clear() und cin.ignore() gelöscht. Dadurch wird sichergestellt, dass das Programm die Eingaben nach der Fehlerbehandlung weiterhin korrekt lesen kann.
Das obige ist der detaillierte Inhalt vonWarum tritt mein C-Programm bei nicht numerischer Eingabe in eine Endlosschleife ein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!