aufgabenstellung: es soll ein int wert eingegeben werden - bei fehlern (irgendwo ein char darunter) soll eine erneute eingabe erfolgen -
C++:
// int_test_1.0.cpp
#include <iostream> usingnamespace std; int in_test ();
int main () {
int zahl1;
do { cout<< "bitte erste zahl eingeben" << flush << endl; cin>> zahl1; }while (in_test() !=0);
cout<< "die zahl ist " << zahl1 + 1<< endl;
return0; }
int in_test () { if (cin.fail ()) { cout<< "fehler bei der eingabe" << endl; cin.clear(); cin.seekg(0L,ios::end); return1; } return0; }
gibt der user eine reine zahl (z.b. 1234) ein tut es was es soll...... wird an erster stelle ein char eingegeben (z.b. w1234) wird der fehler erkannt und der user muss eine neue eingabe machen........... soweit so gut........ wenn allerdings die erste ziffer eine zahl ist gefolgt von falschen eingaben (z.b. 12e34) dann wird der int vor der fehlerstelle (12) angenommen und der user wird zu keiner weiteren eingabe gezwungen - eigentlich sollte er auch in diesem fall eine neue eingabe machen.
bisheriger lösungsansatz ist statt einem cin als int ein char array aufnehmen und stelle für stelle zu testen.....zu guter letzt dann das array mittels atoi wieder in einen int wandeln, den das prog ja braucht.....
C++:
#include <iostream> usingnamespace std; int control (char *);
char zahl[10]; int zahl1; int main () { do { cout<< "zahl eingeben" << endl; cin>> zahl; }while (control (zahl) == 1); zahl1 = atoi (zahl);
cout<< "die zahl ist " << zahl1 + 1<< endl;
return0; }
int control (char * ch_zahl) { for( int i=0; i<strlen (ch_zahl); i++) if ( ! ((int)ch_zahl[i] > 47 && ch_zahl[i] < 58)) { cout<<"falsche eingabe - bitte noch einmal" << endl; return1; } return0; }
diese version macht jetzt genau was ich von ihr verlange - finde es allerdings lästig den umweg über das array zu gehen..
gibt es irgendeine möglichkeit beim cin einen int zu übergeben und dennoch den vollen test zu fahren......
da ich mir seit tagen den kopf damit weich mache bin ich für jede hilfe dankbar Dieser Post wurde am 26.11.2006 um 20:32 Uhr von Windalf editiert.
genialer ansatz - damit komme ich der sache schon ein ganzes stück näher einziges verbleibendes problem ist das bei einer eingabe der rest hinter dem fehler noch im buffer verbleibt. wenn also we12we eingegeben wurde läuft es drei mal duch die schleife (gibt 3x falsche eingabe aus), fordert zur erneuten eingabe auf und meldet dann aber auf einen reinen zahlenwert wieder nen fehler. (beim nächstem versuch geht es dann allerdings) noch ne idee?