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.