Heim > Backend-Entwicklung > C++ > Warum tritt mein C-Programm bei nicht numerischer Eingabe in eine Endlosschleife ein?

Warum tritt mein C-Programm bei nicht numerischer Eingabe in eine Endlosschleife ein?

Mary-Kate Olsen
Freigeben: 2024-12-10 10:18:11
Original
182 Leute haben es durchsucht

Why Does My C   Program Enter an Infinite Loop with Non-Numeric Input?

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;
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage