C++ Cin Eingabe Überprüfung
-
Hallo Zusammen,
hab mich soeben neu angemeldet da ich bei einem bestimmten Problem nicht mehr weiter komme. Ich bin absoluter C++ Neuling, habe vor ein paar Tagen angefangen. Mein Code ist sicherlich nicht der beste, aber Refactoring kann man ja noch immer machen :p
Das Problem ist nun folgendes: Die While Schleifen haben den Sinn, die Cin Eingabe zu Überprüfen und bei falscher Eingabe nochmal durch zu laufen. Funktioniert soweit gut aber sobald ich Zahl und Buchstabe eintippe, lauft die Schleife mehrmals durch. Ich bekomme also bei solch einer Eingabe mehrmals den Text in den Funktionen uri(); pui(); angezeigt.
void secury() { if (cin.fail()) { cin.clear(); cin.ignore(std::numeric_limits<streamsize>::max(), '\n'); } } int main() { short auswahl; bool controll; controll = 1; while (controll == 1) { do { secury(); // Eingabe Überprürung uri_pui(); cin >> auswahl; } while (auswahl < 1 || auswahl > 2 || cin.fail()); if (auswahl == 1) // Auswahl Hauptmenü { short uri_auswahl; do { secury(); uri(); cin >> uri_auswahl; } while (uri_auswahl < 1 || uri_auswahl > 3 || cin.fail()); cout << "Bestanden URI" << endl; } if (auswahl == 2) // Auswahl Hauptmenü { short pui_auswahl; do { secury(); pui(); cin >> pui_auswahl; } while (pui_auswahl < 1 || pui_auswahl > 3 || cin.fail()); cout << "Bestanden PUI" << endl; }
Hat da jemand eine Lösung?
Lg Skyui
-
Das Programm startet und ich gebe 1a ein. Dann landet die 1 in auswahl (Eingabe war OK) und das a bleibt im Puffer.
Dann wird uri ausgegen und ich komme zur Eingabecin >> uri_auswahl
. Die Eingabe schlägt fehl, weil das a im Puffer nicht in einem Integer gespeichert werden kann. Die Schleife läuft also nochmal durch, der Fehlerzustand wird behoben und es wird ein zweites mal uri ausgeben, und ich lande nun wieder bei der Eingabecin >> uri_auswahl
.PS: Guter Code für einen Neuling.