Heim >Backend-Entwicklung >C++ >Wie verhindert man Endlosschleifen bei der Verarbeitung fehlerhafter Datentypeingaben in C?

Wie verhindert man Endlosschleifen bei der Verarbeitung fehlerhafter Datentypeingaben in C?

Susan Sarandon
Susan SarandonOriginal
2024-12-12 15:18:10474Durchsuche

How to Prevent Infinite Loops When Handling Erroneous Data Type Input in C  ?

Wie man mit fehlerhaften Datentypeingaben umgeht

In C ist die Behandlung ungültiger Eingaben von entscheidender Bedeutung, um die Programmintegrität aufrechtzuerhalten. Wenn Sie beispielsweise eine Ganzzahl anfordern und auf eine Zeicheneingabe stoßen, sollte das Programm den Fehler ordnungsgemäß behandeln und erneut die richtige Eingabe anfordern. Allerdings kann die Begegnung mit Eingaben eines unerwarteten Typs zu Endlosschleifen führen.

Grund für die Endlosschleife

Die Endlosschleife entsteht, weil das Flag „Bad Input“ des Eingabestreams aktiviert ist Wird gesetzt, wenn die erwartete Eingabe nicht empfangen wird. Das Flag für fehlerhafte Eingaben muss manuell gelöscht und die falsche Eingabe aus dem Stream-Puffer verworfen werden.

Lösung mit Eingabevalidierung

Um die Endlosschleife zu verhindern, verwenden Sie Folgendes Ansatz:

// Loop if input fails (e.g., no characters were read)
while (std::cout << "Enter a number" && !(std::cin >> num)) {
    std::cin.clear(); // Clear the bad input flag
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // Discard the input
    std::cout << "Invalid input; please re-enter.\n";
}

Alternativer Input-Ansatz

Statt Mithilfe der Eingabevalidierung können Sie die Eingabe als Zeichenfolge abrufen und dann versuchen, sie mithilfe von std::stoi oder einer ähnlichen Methode, die Konvertierungsstatusprüfungen bereitstellt, in eine Ganzzahl umzuwandeln.

Das obige ist der detaillierte Inhalt vonWie verhindert man Endlosschleifen bei der Verarbeitung fehlerhafter Datentypeingaben in C?. 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