Tastaturabfrage merkwürdige Reaktion
-
Hallo, hab da ein Anfängeproblem.
Mein Pog unten führt eine Tastaturabfrage durch. Bei Drüken der Tase "x" springt das Prog raus. Bei allen anderen Tasten soll es "Hallo" auf dem Bildschirm schreiben.
Alles fuktioniert gut, bis ich die Pfeiltasten oder Fuktionstasten drücken. Dann schreibt das 2 mal "Hallo", obwohl doch nur 1 mal geklickt wurde!!
Was übersehe ich, was mache ich falsch und wie kann ich es ändern?********************************************
int main(int argc, char *argv[])
{char ch;
while (((ch=getch()) !='x') )
{printf("hallo");
}
printf("\n Exit");
getch();return 0;
}
-
Mit was für einem Zeichen sollen die Pleiltasten, Escape und fie F-Taten denn dargestellt werden?
Bei solchen Tastatureingaben, die nicht direkt in ein Zeichen umgewandelt werden können, wird bei getch() zwei Zeichen ausgegeben. Gib doch anstatt "hallo" mal ch aus, dann siehst du was getch() ausgibt (Wahrscheinlich werden mehr oder weniger sinnvolle Zeichen ausgegeben).
Außerdem sollte man das schließen der Console nicht mit getch() abfangen.
-
Danke für die Hinweise.
Ich habe bereits ch mit printf ausgeben lassen und sah ebenfalls, dass zwei Eingaben aus dem Puffer kommen. Und mit getch() zum Verlassen wird derzeit leider gelehrt, im Grundkurs c++...Mein Problem ist aber folgendes:
Mein Programm soll auf jeden Tastenklick reagieren und pro Klick eine Prozedur ausführen. Ich habe "Hallo" nur zur Veranschaulichung gewählt.
Wie mache ich es, dass wirklich jeder Tastenklick nur als EIN KLICK wahrgenommen wird. Wie erwähnt läuft meine Prozedur bei den Funktionstasten und Pfeiltasten immer zweimal hintereinander aus, obwohl ich nur einmal geklickt habe.
Ein Tip für mich?
-
EdisonHH schrieb:
Danke für die Hinweise.
Ich habe bereits ch mit printf ausgeben lassen und sah ebenfalls, dass zwei Eingaben aus dem Puffer kommen. Und mit getch() zum Verlassen wird derzeit leider gelehrt, im Grundkurs c++...Mein Problem ist aber folgendes:
Mein Programm soll auf jeden Tastenklick reagieren und pro Klick eine Prozedur ausführen. Ich habe "Hallo" nur zur Veranschaulichung gewählt.
Wie mache ich es, dass wirklich jeder Tastenklick nur als EIN KLICK wahrgenommen wird. Wie erwähnt läuft meine Prozedur bei den Funktionstasten und Pfeiltasten immer zweimal hintereinander aus, obwohl ich nur einmal geklickt habe.
Ein Tip für mich?
Wenn du doch weißt, was getch beim Drücken einer Funktionstaste zurück gibt, dann behandle diesen Fall doch einfach gesondert. Ich nehme mal an, dass dieser Zwei-Zeichen-Code ungefähr so aussieht: bestimmtes Steuerzeichen + weiters Zeichen. Wenn nun das Steuerzeichen gelesen wird, dann liest du einfach gleich noch das nächste Zeichen ein und tust so, als wäre nur ein Zeichen gelesen worden.
Diese Technik kann im Prinzip funktionieren, ich habe als eines meiner ersten komplexeren Programme mit QBasic unter DOS ein Tetris geschrieben. Da ging das genauso, wenn man die Pfeiltasten abfragen wollte.