mikrocontroller.net

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


Autor: Gizmo (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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-...

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.

Autor: zwieblum (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.