Heim >Backend-Entwicklung >C++ >Wie kann verhindert werden, dass Endlosschleifen in C falsche Datentypen eingeben?

Wie kann verhindert werden, dass Endlosschleifen in C falsche Datentypen eingeben?

Barbara Streisand
Barbara StreisandOriginal
2024-12-13 10:30:13295Durchsuche

How to Prevent Infinite Loops from Incorrect Data Type Input in C  ?

Umgang mit falschen Datentypeingaben in C

Um unerwartetes Verhalten und Endlosschleifen zu verhindern, muss sichergestellt werden, dass der Benutzer den richtigen Datentyp bereitstellt. In C kann der Umgang mit falschen Eingaben eine Herausforderung sein.

Problemstellung:

Wenn das Programm eine ganzzahlige Eingabe erwartet und der Benutzer ein Zeichen eingibt, gibt das Programm eine Unendlichkeit ein Schleife. Umgekehrt tritt das gleiche Problem auf, wenn eine Ganzzahl erwartet wird, aber ein Zeichen eingegeben wird.

Lösung:

Die Endlosschleife tritt auf, weil die Funktion std::cin eine fehlerhafte Eingabe hat Flag wird gesetzt, wenn die Eingabe fehlschlägt. Um dieses Problem zu beheben, müssen wir:

  • das fehlerhafte Eingabeflag löschen: std::cin.clear();
  • das ungültige verwerfen Eingabe aus dem Puffer: std::cin.ignore(std::numeric_limits::max(), 'n');

Hier ist ein Beispiel-Codeausschnitt:

while (std::cout << "Enter a number" && !(std::cin >> num)) {
    std::cin.clear(); // clear bad input flag
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // discard input
    std::cout << "Invalid input; please re-enter.\n";
}

Dieser Code wird in einer Schleife ausgeführt, bis der Benutzer eine gültige Zahl eingibt. Es löscht das Flag für fehlerhafte Eingaben, verwirft die ungültige Eingabe und fordert den Benutzer auf, es erneut zu versuchen.

Alternativer Ansatz:

Anstatt std::cin zu verwenden, können Sie Sie können die Eingabe auch als Zeichenfolge abrufen und mit std::stoi in eine Ganzzahl konvertieren. Mit diesem Ansatz können Sie die Konvertierung überprüfen, bevor Sie die Eingabe einer Ganzzahlvariablen zuweisen.

Das obige ist der detaillierte Inhalt vonWie kann verhindert werden, dass Endlosschleifen in C falsche Datentypen eingeben?. 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