2017-02-27 5 views
0

Ich werde nicht prüfen, ob die Alter Nummer oder nicht in diesem Beispiel ist, wird es 1E als Nummer akzeptieren, während sie E1 nicht akzeptieren, würde nicht ich nur einstellige
kein Symbol oder AlphabetWie kann ich validieren, dass die Eingabe nur Ziffern ist?

int main() 
    { 
     int age= 0; 
     std::cin >> age; 
     if (std::cin.fail()) 
     { 
     std::cout << "I failed, try again ..." << std::endl; 
     std::cin.clear(); // reset the failed state 
    } 
+0

'getline' +' regex' – knivil

+0

@knivil, Wenn versucht wird, das Integer-Ergebnis zu speichern, ist Regex eine Art Overkill. Ein Aufruf von 'std :: stoi' genügt bei korrekter Fehlerprüfung. – chris

+0

@knivil Verwenden von 'Regex' ist wahrscheinlich Overkill. –

Antwort

0

wirklich akzeptieren cin und die Extraktionsoperatoren sind nicht zum Analysieren von Benutzereingaben geeignet. Sie sind in Ordnung für die Eingabe von automatisch formatierten Datensätzen, aber nicht für Eingaben, bei denen es wahrscheinlich Fehler in der Form gibt.

Wenn Sie zeilenbasierte Eingabe verwenden, rufen Sie die Funktion strtol() auf, Sie können Ziffern finden. strtol() behandelt auch Minuszeichen und Zahlen, die zu groß sind, um in eine Ganzzahl zu passen. Es ist im Wesentlichen der sichere Integer-Parser. Außerdem können Sie bei einem Fehler die gesamte Zeile einfach verwerfen und den Benutzer zur erneuten Eingabe auffordern, was normalerweise das gewünschte Verhalten ist.

Verwandte Themen