scanf, cin in einer while-Schleife
-
Hallo!
In folgendem C-Programm liegt folgendes Problem, dass wenn ich das cin, bei dem ich selection einlesen will, mit scanf ersetze, das Programm nicht in jedem Schleifendurchlauf anhält und mich die Variable einlesen läßt. Mit scanf, muss er immer erst zweimal die Schleife durchlaufen bis er stehen bleibt. Mit cin funktioniert das jedoch einwandfrei.
An was könnte das liegen? Warum funktioniert das mit dem C++ Befehl und mit dem C Befehl nicht?void menue(void) { int end = 1; char selection; char c = 0; // getPath(); readINI(); while(end < 2) { cout <<"\n\n"; cout <<"HAUPTMENUE \n"; cout <<"------------------------------------- \n"; cout <<"Was wollen Sie tun? \n"; cout <<" (D)rehzahlregelreis optimieren\n"; cout <<" (L)ageregelkreis optimieren\n"; cout <<" (E)nde\n"; :warning: :arrow_right: cin >> selection; cout <<"\n \n \n"; switch(selection) { case 'D': {optSpeedCtrlLoop(); break;} case 'L': {optPosCtrlLoop(); break;} case 'E': {end = 3; break;} } } }
Ich schreibe mit Visual Studio 2003.net
-
Das sind keine Befehle!
Ansonsten solltest du den Tastatur-Buffer "reinigen". Nach dem Aufruf von scanf könntest du zB getchar aufrufen.
-
Wie reinigt man den Tatatur Buffer?
Warum nach scanf nochmals getchar? ist das nicht doppel gemoppelt?
Noch ein wenig konstruktive Kritik zu "Das sind keine Befehle"....du hättest auch gleich dazuschreiben können was es dann ist, den wie es scheint weißt du was es ist.
Ich lasse mich gerne verbessern und habe absolut nichts dagegen wenn es jemand besser weiß.
-
scanf("%c",&x) holt sich das nächste Zeichen, das noch im Eingabepuffer steht - das ist vermutlich das NewLine - cin überliest als erstes alle WhiteSpaces und holt sich dann ein Zeichen aus der Eingabe. Deswegen mußt du vor der Eingabe mit scanf() dafür sorgen, daß das NewLine bereits ausgelesen wurde - dafür gibt es verschiedene Möglichkeiten. Die eleganteste ist imho:
while(getc()!='\n');
(PS: cin ist ein Objekt (Typ istream) mit überladenem Shift/Eingabe-Operator, scanf() ist eine Funktion der Standardbiliothek)
-
DANKE!!!!! SUPER ANTWORT