Wie umgeht man den Fehler, wenn anstatt eines Integerwerts ein char wert eingegeben wird?
-
ein Beispiel:
#include <iostream.h> #include <conio.h> main() { int zahl,ergebnis; ergebnis=0; do { cin>>zahl; if(zahl==0) { break; } ergebnis+=zahl; } while(1); cout<<"Ergebnis: "<<ergebnis; getch(); }
Ein simples Programm. Aber wenn man anstatt einer Zahl einen Buchstaben eingibt, dann liefert er komische Ergebnisse. Meine Frage lautet, wie man diesen Fehler umgehen kann?Ich habe schon im Forum nach Beiträgen gesucht, aber nichts gefunden. Danke im voraus!
chinese Dragon
-
Wenn du eine sicher Eingabe haben willst mußt du den langen weg gehen.
Lies es alls string eine, überprüfe obe es eine gültige Zahl ist, konvertiere dann.
-
hier stehen zwei beispiele, wies gemacht wird
http://www.augustcouncil.com/~tgibson/tutorial/iotips.html#directlyund nimm die "neue" <iostream> mit using namespace std;
du kannst mit dem cin selber überprüfen.
-
Sieh mal in die FAQ "Reine Zahleneingabe"
MfG SideWinder
-
schau dir die beispiele oben auch noch an, sind schön übersichtlich und einfach, dein beispiel in der faq "erschlägt" eventuell..
-
elise schrieb:
schau dir die beispiele oben auch noch an, sind schön übersichtlich und einfach, dein beispiel in der faq "erschlägt" eventuell..
BSP ist von Shade :D.
Naja bei dir wird einfach solange etwas eingegeben bis was richtiges dasteht. Bei mir kann mans nur richtig eingeben - der kleine feine Unterschied ;).
MfG SideWinder
-
Bei sowas nehme ich immer wieder gerne die C-Funktion scanf() zu Hilfe:
#include <stdio.h> void eat_line(void) { int c; while ((c = getchar()) != EOF && c != '\n') ; } int main( void ) { int num, f; printf("Geben Sie bitte eine Zahl ein: "); while ((f = scanf("%d", &num)) != EOF && f != 1) { printf("Fehler\nGeben Sie bitte eine Zahl ein: "); eat_line(); } if (f != EOF) { printf( "Ihre Zahl: %d\n", num ); /* ... */ } return 0; }
Das einzige, was hier nicht abgefangen wird, ist eine Eingabe die einen Überlauf verursacht. Alles andere sollte wie gewünscht funktionieren...
-
Toll, bloß ist das das gleiche wie im Link von elise nur in C statt in C++.
MfG SideWinder
-
Ok, erst Mal, danke euch allen. Das von elise habe ich so verstanden und das von Side Winder muss ich mir nochmal genauer angucken :D.
chinese Dragon