Mit Enter Eingabe, eine Funktion ausführen
-
Hallo Leute,
ich brauch mal wieder eure Hilfe.
Ich befinde mich in einer do-schleife, die ein Benutzermenü
darstellt.
Nun möcht ich, in den einzelnen Untermenüs ins Hauptmenü per Enter-butten gelangen,
nach folgenden Ablauf:Bitte betätigen Sie die Enter-Taste um ins Hauptmenü zu gelangen.
Anschließen bei Betätigung befindet man sich wieder im Hauptmenü.
Kann mir bitte einer sagen, mit welchen Funktionen bzw. code ich das realisiere.
MfG
Martin
-
seh ich das richtig, das du in der while schleifer verweihlst solange eine entsprechende taste gedrück wird?
-
versuch's mal mit cin.get() (oder mit Systemfunktionen ala GetAsyncKeyState(), wenn du den internen Puffer von cin unmgehen willst).
-
In der Do-Schleife befindet sich ein switch-case block.
Und je nach eingabe im Menü kommt man in den richtigen case.
Das Problem bei der ganzen Sache ist, ich möcht gern nach Abhandeln des eine "case"
einfach per Return-Taste wieder ins Hauptmenü.Hi CStoll, wie meinst du das mit cin.get(), GetAsyncKeyState(). Weißt du evtl. wie man die Funktionen einsetzt.
-
cin.get() liest ein Zeichen aus dem Tastaturpuffer und gibt es zurück - das kannst du dann mit '\n' (aka ENTER) vergleichen, um zurückzukehren:
cout<<"Bitte ENTER-Taste drücken"; while(cin.get()!='\n'){}GetAsyncKeyState() (aus der WinAPI) fragt das System direkt, ob eine bestimmte Taste gerade gedrückt ist - das heißt, du mußt so lange warten, bis ENTER reagiert:
while(GetAsyncKeyState(VK_RETURN)!=0){}
-
Danke.
Nur leider übergeht der diese Anweisung, und springt direkt wieder ins Hauptmenü. Hast du eine Idee, wieso mein compiler das macht?
case 2: system("cls"); for(int i=0; i < 499; i++){ if(la[i].getstartnr() > 0){ la[i].ausgeben(); continue; } else { break; } } cout<<"Bitte ENTER-Taste drücken"; while(cin.get()=='\n'){ break; } break; case 3:
-
So vll.:
bool finished= false; do{ switch(...){ . . . . case 2: system("cls"); for(int i=0; i < 499; i++){ if(la[i].getstartnr() > 0){ la[i].ausgeben(); continue; } else { break; } } cout<<"Bitte ENTER-Taste drücken"; while(cin.get()=='\n'){ finished= true; } break; case 3: . . .. } }while(!finished);
-
Martini123 schrieb:
Nur leider übergeht der diese Anweisung, und springt direkt wieder ins Hauptmenü. Hast du eine Idee, wieso mein compiler das macht?
while(cin.get()=='\n'){ break; }Du springst ja schon im ersten Durchlauf aus der "Warte auf Enter"-Schleife raus

PS: Mir ist gerade ein Fehler bei meinem Code aufgefallen - es muß
while(cin.get()!='\n')heißen.
-
Wenn das so realisiere, dann wartet der Compiler an der Stelle,
aber bei eingabe von Return, passiert leider nichts. Es kommt
auch kein Compiler-Fehler
-
@BorisDieKlinge Bei der Lösung passiert bei Eingabe des Returns nichts, aber hier wird nicht sofort ins Hauptmenü gesprochen
@CStoll
Auch wenn ich in der while-schleife das break entferne, wird die whileschleife übergangen und ich befinde mich wieder im hauptmenü (ohne enter eingeben zu können)
-
*grübelt* Was war denn das letzte, was du vor dem switch()-Block eingegeben hast? Ich würde ja vermuten, daß von der letzten Eingabe noch ein ENTER im Tastaturpuffer zurückgeblieben ist, das du erst entsorgen mußt (schau dir mal cin.ignore() an).
-
Also zuerst geh unter menüpunkt 1 rein, um die Objekte anzulegen, nach der letzten eingabe, befinde ich wieder im Hauptmenü.
Nun geb ich die Zahl 2 ein um in den Menüpunkt zukommen (case 2), die Eingabe 2
muss ich natürlich mit enter bestätigen.Könnte es daran liegen? Wenn ja, was muss ich dann machen?
Vielen Dank, dass du versuchst mir weiterzuhelfen.
-
achso sorry, hast du ja geschrieben, dass es daran liegen könnten

Nur zum Verständnis, was und an welcher Stelle muss ich jetzt was ignorieren?
-
cin.ignore(); // evtl. mußt du hier Parameter angeben while(cin.get()!='\n') { }
-
Jetzt geht es, *freu*
Ich bedanke mich bei allen Beteiligten und wünsche euch noch
einen schönen Tag.Gruß
Martini