Heim > Backend-Entwicklung > C++ > Wie validiere ich numerische Eingaben in C über „atoi()' hinaus?

Wie validiere ich numerische Eingaben in C über „atoi()' hinaus?

Linda Hamilton
Freigeben: 2024-11-21 21:01:12
Original
279 Leute haben es durchsucht

How to Validate Numeric Input in C   Beyond `atoi()`?

Validierung numerischer Eingaben in C

In einem Programm, das Ganzzahleingaben verarbeitet, ist es von entscheidender Bedeutung, sicherzustellen, dass Benutzer gültige Zahlen angeben. Leider ist die Funktion atoi() bei der Verarbeitung mehrstelliger Ganzzahlen unzureichend. In diesem Artikel werden alternative Methoden zur Überprüfung numerischer Eingaben untersucht.

Verwendung des Failbits

Der Eingabestream (cin) von C setzt das Failbit, wenn er auf eine Eingabe stößt, die er nicht analysieren kann. Dies kann genutzt werden, um Eingaben wie folgt zu validieren:

int n;
cin >> n;
if(!cin) {
    // User did not input a number
    cin.clear();
    cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
Nach dem Login kopieren
  • if(!cin) prüft, ob das Failbit gesetzt ist.
  • cin.clear() setzt den Stream-Status zurück.
  • cin.ignore() überspringt die ungültige Eingabe und berücksichtigt Neueingabe.

Umgang mit Eingabeüberlauf

Wenn Ganzzahlen den maximal zulässigen Wert überschreiten, setzt cin auch das Failbit. Um dies zu verhindern, überprüfen Sie den Stream-Status, bevor Sie die Eingabe lesen:

while(!cin.eof()) {
    int n;
    cin >> n;
    if(!cin) {
        // Input error occurred
        cin.clear();
        cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
    else {
        // Valid input
        process(n);
    }
}
Nach dem Login kopieren

Diese Schleife liest und validiert die Eingabe weiter, bis das Ende der Datei (EOF) erreicht ist.

Sonstiges Alternativen

  • C 11's Stringstream: Erstellen Sie einen Stringstream aus der Eingabe und versuchen Sie, es in eine Ganzzahl umzuwandeln.
  • Reguläre Ausdrücke (regex):Verwenden Sie reguläre Ausdrücke, um ein bestimmtes numerisches Format zu erzwingen.
  • Boost Libraries: Nutzen Sie boost::regex oder boost::lexical_cast von Boost zur Eingabevalidierung.

Das obige ist der detaillierte Inhalt vonWie validiere ich numerische Eingaben in C über „atoi()' hinaus?. 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