Forum: PC-Programmierung win 32 konsole +c +problem mit getch()


von Gizmo (Gast)


Angehängte Dateien:

Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von zwieblum (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.