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
Linda HamiltonOriginal
2024-11-21 21:01:12278Durchsuche

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');
}
  • 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);
    }
}

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!

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