Heim >Backend-Entwicklung >C++ >Warum verursacht die Buchstabeneingabe eine Endlosschleife in meinem C-Programm?

Warum verursacht die Buchstabeneingabe eine Endlosschleife in meinem C-Programm?

DDD
DDDOriginal
2024-12-04 02:37:11349Durchsuche

Why Does Letter Input Cause an Infinite Loop in My C   Program?

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:

  • Die while-Schleife wurde in eine do-while-Schleife gekapselt, um mindestens sicherzustellen eine Ausführung, auch wenn die anfängliche Eingabe ungültig ist.
  • Innerhalb der inneren Schleife wird eine ordnungsgemäße Eingabevalidierung mithilfe von cin.fail() implementiert. Funktion.
  • Wenn eine ungültige Eingabe erkannt wird, wird eine Fehlermeldung angezeigt und der CIN-Puffer wird gelöscht und ignoriert, um zu verhindern, dass er sich auf nachfolgende Eingabeversuche auswirkt.
  • Der Benutzer wird dann zur erneuten Eingabe aufgefordert - Geben Sie eine gültige Ganzzahl ein.
  • Dieser Vorgang wird fortgesetzt, bis der Benutzer eine positive Ganzzahl eingibt.

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!

Stellungnahme:
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