Heim > Backend-Entwicklung > C++ > Wie kann ich numerische Eingaben in C robust verarbeiten, um teilweise Eingabefehler zu verhindern?

Wie kann ich numerische Eingaben in C robust verarbeiten, um teilweise Eingabefehler zu verhindern?

DDD
Freigeben: 2024-12-21 07:29:10
Original
435 Leute haben es durchsucht

How Can I Robustly Handle Numerical Input in C   to Prevent Partial Input Errors?

Sicherstellung der numerischen Eingabe mit robuster Fehlerbehandlung

In der C-Programmierung ist der Standard-Eingabestream (cin) ein vielseitiges Werkzeug zum Lesen von Benutzereingaben . Wenn es jedoch darum geht, sicherzustellen, dass die Eingabe ausschließlich numerisch ist, sind zusätzliche Maßnahmen erforderlich.

Ein Ansatz zur Validierung numerischer Eingaben besteht darin, eine Schleife zu verwenden, um den Benutzer wiederholt aufzufordern, bis eine gültige Zahl eingegeben wird. Der in der Problembeschreibung bereitgestellte Code verwendet diese Technik und prüft mit cin.fail() auf Eingabefehler. Wenn eine ungültige Eingabe festgestellt wird, wird der Puffer geleert und der Benutzer aufgefordert, eine Zahl erneut einzugeben.

Dieser Ansatz weist jedoch eine potenzielle Einschränkung auf: Wenn der Benutzer eine teilweise gültige Zahl eingibt, z. B. „1x, " Der Teil „1“ wird als Eingabe akzeptiert und das Zeichen „x“ verbleibt im Puffer. Dies kann zu unerwartetem Verhalten bei nachfolgenden Eingabevorgängen führen.

Um dieses Problem zu beheben, besteht ein robusterer Ansatz darin, std::getline() zu verwenden, um die gesamte Eingabezeile als Zeichenfolge zu lesen. Anschließend kann std::stringstream verwendet werden, um die gesamte Zeile in eine Gleitkommazahl doppelter Genauigkeit umzuwandeln. Wenn die Konvertierung erfolgreich ist (überprüft durch Prüfung auf ss.eof()), gilt die Eingabe als gültig und die Schleife kann verlassen werden.

Hier ist eine modifizierte Version des Codes, die diese erweiterte Fehlerbehandlung enthält :

#include <string>
#include <sstream>

double enter_number() {
    std::string line;
    double number;
    while (true) {
        std::getline(std::cin, line);
        std::stringstream ss(line);
        if (ss >> number) {
            if (ss.eof()) {
                return number;
            }
        }
        std::cout << "Invalid input, please enter a numerical value: ";
    }
}
Nach dem Login kopieren

Dieser Code stellt sicher, dass nur gültige reelle Zahlen ohne nachgestellte Zeichen als Eingabe akzeptiert werden. Es fordert den Benutzer wiederholt auf, bis eine gültige Eingabe erfolgt, was ein robusteres und benutzerfreundlicheres Erlebnis bietet.

Das obige ist der detaillierte Inhalt vonWie kann ich numerische Eingaben in C robust verarbeiten, um teilweise Eingabefehler zu verhindern?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage