Schleife hängt sich nach falscheingabe im Endlosmodus auf.
-
Hallo,
ich habe ein Problem mit einer meiner Methoden. Genauer gesagt der zum eingeben des Alters.
Wenn ich das Alter (DD MM JJJJ) falsch eingebe dann warnt er mich wie gewollt, dass ich das Alter richtig einzugeben habe und gibt mir auch die Möglichkeit dazu. Wenn ich dann aber ein korrektes Alter angebe dann nimmt er es nicht an (generell wird kein Alter mehr akzeptiert).
Kurios ist, dass er wenn ich zu beginn ein alter Angebe welches korrekt ist es ohne Probleme nimmt. Wenn ich aber eine Falscheingabe getätigt habe er genau dieses nicht mehr nimmt.Zum Hintergrund: Ich muss eine Benutzerverwaltung programmieren mit mehreren Parametern (Name, Vorname, alter etc...).
Kann bitte jemand über meinen Code schauen und mir evt einen tipp geben was ich falsch gemacht habe. Danke!
(So und nun hoffe ich auch noch im richtigen Bereich zu sein :))
void ski::gebdatum() { int x = 0; do { cout << "Geburtsdatum DD MM JJJJ: " << endl; cin >> dated >> datem >> datej; if ((dated < 1) || (dated > 31) || (datem < 1) || (datem > 12) || (datej < 1910) || (datej > 2011)) x = 1; if (x == 1) cout << "Bitte geben sie das Geburtsdatum korrekt ein." << endl; } while (x == 1); }
-
So wie das für mich aussieht musst du die Variable
xam Anfang der Schleife einfach auf '0' setzen.void ski::gebdatum() { int x = 0; do { x = 0; // Rest des Codes } while (x == 1); }Sobald eine Fehleingabe passiert, bleibt
xständig auf Wert 1 hängen, demnach läuft auch Deine Schleife immer erneut durch.
-
Super, vielen dank, hat funktioniert und macht auch sinn (wenn ich jetzt drüber nachdenke :))
-
Alternativen:
void ski::gebdatum() { while(true) { cout << "Geburtsdatum DD MM JJJJ: " << endl; cin >> dated >> datem >> datej; if (!((dated < 1) || (dated > 31) || (datem < 1) || (datem > 12) || (datej < 1910) || (datej > 2011))) //mit ! den logischen wert umkehren break; cout << "Bitte geben sie das Geburtsdatum korrekt ein." << endl; } }void ski::gebdatum() { bool richtigesDatum = false; do { cout << "Geburtsdatum DD MM JJJJ: " << endl; cin >> dated >> datem >> datej; if (!((dated < 1) || (dated > 31) || (datem < 1) || (datem > 12) || (datej < 1910) || (datej > 2011))) richtigesDarum = true; else { cout << "Bitte geben sie das Geburtsdatum korrekt ein." << endl; } } while(!richtigesDatum); }