Heim > Backend-Entwicklung > C++ > Warum verursachen Buchstaben Endlosschleifen in C-Zahleneingabeprogrammen?

Warum verursachen Buchstaben Endlosschleifen in C-Zahleneingabeprogrammen?

Patricia Arquette
Freigeben: 2024-12-02 21:20:11
Original
504 Leute haben es durchsucht

Why Do Letters Cause Infinite Loops in C   Number Input Programs?

Endlosschleifen bei der Eingabe von Buchstaben anstelle von Zahlen verstehen

Beim Ausführen eines Programms, das zur Eingabe von Ganzzahlen auffordert, stößt man häufig auf eine Endlosschleife wenn ein Benutzer einen Buchstaben anstelle einer Zahl eingibt. Dieses Problem entsteht aufgrund der Funktionsweise der Eingabeverarbeitung in C.

Die Grundursache:

In C wird die Funktion cin zum Lesen von Eingaben verwendet. Wenn jedoch nicht numerische Zeichen eingegeben werden, kann cin keine gültige Ganzzahl extrahieren. Infolgedessen wird das Failbit-Flag im Cin-Stream-Objekt gesetzt, was auf einen Fehler hinweist.

Reparieren der Endlosschleife:

Um die Endlosschleife aufzulösen, benötigen wir um das ungültige Eingabeszenario zu erkennen und zu behandeln. Hier ist ein geänderter Teil des Codes, der dieses Problem behebt:

#include <limits> // Includes numeric_limits for input validation

// (...) Existing code

// user enters a number
cout << "\nPlease enter a positive number and press Enter: \n";
do {
    while (!(cin >> num1)) {
        cout << "Incorrect input. Please try again.\n";

        // Clear the failbit and ignore the remaining input
        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);
Nach dem Login kopieren

Erklärung:

  • while (!(cin >> num1)) prüft, ob cin eine Ganzzahl erfolgreich gelesen hat. Ist dies nicht der Fall, tritt es in die innere Do-While-Schleife ein, um den Fehler zu behandeln.
  • cin.clear(); setzt das Failbit-Flag zurück, sodass cin die Eingabe erneut lesen kann.
  • cin.ignore(numeric_limits::max(), 'n'); liest und verwirft alle Zeichen, bis ein Zeilenumbruchzeichen gefunden wird. Dadurch wird sichergestellt, dass alle ungültigen Eingaben, die vor dem Zeilenumbruch eingegeben wurden, verworfen werden.
  • Mit dieser Korrektur führt das Programm jetzt nur dann eine Schleife aus, wenn eine gültige positive Ganzzahl eingegeben wird, wodurch eine Endlosschleife aufgrund ungültiger Eingaben verhindert wird.

    Das obige ist der detaillierte Inhalt vonWarum verursachen Buchstaben Endlosschleifen in C-Zahleneingabeprogrammen?. 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