do{...}while(!(cin>>wert)); produziert Endlosschleife
-
Guten Tag.
Ich war auf der Suche nach einer Möglichkeit die Eingabe des Benutzers zu kontrollieren. Da habe ich mir dann folendes ausgedacht:#include <iostream> using namespace std; int main() { int wahl; do{ cout<<"bitte geben sie ihre Wahl an: "; }while (!(cin>>wahl)); cout<<"Sie haben gewaehlt: "<<wahl<<endl; system("PAUSE"); return 0; }Wenn man nun einen gültigen Integerwert eingibt funktioniert alles wie es soll.
Gibt man z.B. einen Buchsteben ein dann entsteht eine Endlosschleife und der Benutzer kommt garnicht mehr zum Eingeben eines neuen Wertes.Ich hoffe ihr könnt mir sagen wo der Fehler liegt und wie ich ihn beheben kann.
Grüße Boris_DieKlinge
-
Das liegt daran das cin in einem fehlerhaften zustand ist und der erst "repariert" werden muss bevor du cin wieder verwenden kannst.
-
könntest du mir vieleicht genauer beschreiben wie ich dabei vor zu gehen habe?
ich habe das jetzt schon mit einem cin.sync() versucht aber das löst das problem nicht.
-
cin.clear();
-
Und was machen wir mit den Zeichen, die den Fehler verursacht haben und noch immer darauf warten aus dem Puffer ausgelesen zu werden?
:xmas2: :xmas1:
-
die holen wir raus und da du es weisst solltest du mal posten wies funktioniert.
-
Vielen dank.
Eine Kombination aus cin.sync und cin.clear tut den job.#include <iostream> using namespace std; int main() { int wahl; do{ cout<<"bitte geben sie ihre Wahl an: "; cin.clear(); cin.sync(); }while (!(cin>>wahl)); cout<<"Sie haben gewaehlt: "<<wahl<<endl; system("PAUSE"); return 0; }Hier, für die jenigen die auch auf das Problem stoßen, die Links zur Reference
der beiden befehle:
http://www.cplusplus.com/reference/iostream/istream/sync/
http://www.cplusplus.com/reference/iostream/ios/clear/