2012-03-31 7 views
1

Ich habe ein Problem damit, in der Lage zu sein, sich um Laufzeitfehler zu kümmern, wo der Benutzer andere Daten eingibt als erwartet. Zum Beispiel wird eine Ganzzahl erwartet, aber (möglicherweise) gibt der Benutzer eine Zeichenfolge ein. In meinen Konsolenprogrammen, wenn das passiert, bekomme ich einfach eine Menge Junk auf meinem Bildschirm, es geht in Endlosschleife. Wie kann ich mich darum kümmern, dass in diesem Fall eine Fehlermeldung angezeigt wird, anstatt dass das gesamte Programm in den Papierkorb geht?Wie fange ich einen Laufzeitfehler in C++?

int x = 0; 
cout << "\n\nEnter a number(1-9): "; 
cin >> x; 
if(x<1 || x>9) 
{ 
    cout<<"\nThe place you entered is invalid. Please enter the correct place number"; 
}else{ 
    cout<<"Correct"; 
} 

Wenn i eine Zahl eingegeben oberhalb als 2^31 (i wissen, seinen den Maximalwert für int Datentyp) oder einen char Wert in eine unendliche Schleife geht. Wie kann ich diese problme fangen lösen

+0

Dies ist ein Duplikat von: http://stackoverflow.com/questions/545907/what-ist-the-best-way-to-do-input-validation-in-c-with-cin –

Antwort

2

cin ist ein bisschen komisch, dass, wenn Sie versuchen, Daten aus dem Benutzer zu lesen und die Art ist falsch (zB eine Zeichenkette eingeben, wenn ein int wird erwartet) oder der Wert Illegal (zum Beispiel ist es zu groß), cin tritt in einen "Fail-Status" ein und von diesem Punkt an wird weigern, irgendwelche Werte vom Benutzer zu lesen, bis Sie das Problem explizit beheben. Richtig Daten aus cin zu lesen, so dass dies nicht geschieht, ist ein bisschen schwierig, aber kann vereinfacht werden, indem Sie einfach einige nette Hilfsroutinen einmal schreiben und sie in Ihren späteren Programmen aufrufen.

Eine Beschreibung eines Ansatzes für richtig Daten aus cin lesen, möchten Sie vielleicht these course notes from Stanford's CS106L course überprüfen, die beschreiben, wie die Arbeit in C++ Streams und wie Daten richtig lesen und schreiben.

Hoffe, das hilft!