Hallo Ich habe folgendes problem ich möchte ein menü mit hilfe der switch anweisung in der win 32 konsole programmieren. um eine taste einzulesen habe ich eine extra funktion geschrieben die ein char also das zeichen (taste) die gdrückt wurde zurück gibt. das problem ist aber dass das programm direkt nach den kompilieren beendet wird da schon ein zeichen im puffer steht. Das kann ich mir nicht erklären da ich zu aller erst den puffer mit fflush(stdin) löschen und dann auf eine eingabe warte. code im anhang hat mir villeicht jemand ein menü das ich mir das mal anschauen kann. Ich möchte ein hauptmenü schreiben von dem mann in untermenüs springen kann. In die untermenüs reinspringen ist kein problem aber ich möchte durch drüchen der taste q wieder ein menü höher springen. wie mache ich das ohne den goto befehl zu verwenden ? danke für euere hilfe gruß gizmo
Gizmo wrote: > um eine taste einzulesen habe ich eine extra funktion geschrieben die > ein char also das zeichen (taste) die gdrückt wurde zurück gibt. > das problem ist aber dass das programm direkt nach den kompilieren > beendet wird da schon ein zeichen im puffer steht. Das kann ich mir > nicht erklären da ich zu aller erst den puffer mit fflush(stdin) löschen > und dann auf eine eingabe warte. > code im anhang Dein Code passt nicht zu deiner Problembeschreibung Aber: einen Input Stream kann man nicht per fflush löschen. fflush ist immer nur für Ausgabe-Streams. Aber: Die C++ Standard Streams sind für interktive Geschichten wie Menüs nicht besonders gut geeignet, weil sie von der Hardware abstrahiert sind. Auf vielen System gibt es daher einen Satz von anderen Funktionen, mit denen man gezielt auf zb. Keyboards reagieren kann. Schau dir zb mal dir Funktionen in conio.h an http://www.c-plusplus.de/forum/viewtopic-var-p-is-284396.html Erwähnt werden soll noch, dass diese Funktionen nicht im C++ Standard enthalten sind (der C++ enthält so gut wie gar nichts, was in irgendeiner Form Hardwarespezifisch sein könnte). Ob und wie diese Funktionen mit den Standard-Streams zusammenarbeiten, ist daher immer wieder eine spannende Frage. > In die untermenüs reinspringen ist kein problem aber ich möchte durch > drüchen der taste q wieder ein menü höher springen. wie mache ich das > ohne den goto befehl zu verwenden ? Indem dein Untermenü in einer eigenen Funktion verpackt ist. Wird am Hauptmenü der Menüpunkt ausgewählt, so wird diese Funktion aufgerufen. Die Funktion malt das Untermenü hin und behandelt Eingaben. Wird bei dieser Eingabebehandlung ein 'q' gesehen, dann retourniert die Funktion und gibt die Kontrolle wieder zurück zum Hauptmenü. Jede Menüstufe ist also einfach nur eine Funktion für sich. Wird in einem Menü ein Unterpunkt angewählt, der zu einem Untermenü führt, so wird einfach nur die zuständige Funktion aufgerufen.
der grund, warum's nicht funktioniert, ist der eingeschaltete zeilenpuffer in der console. d.h., erst wenn du enter drückst, werden die zeichen an cin weitergegeben. du musst folglich zuerst den zeilenpuffer ausschalten, normalerweise mit setvbuf() - das solls gerüchteweise auch unter windows geben.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.