Tastatur auslesen -> kann mir jemand erklären, was da passiert?
-
Hallo,
ich lese die Tastatur aus mit der Routine wie untenstehend. Das funktioniert auch, nur wenn ich Sondertasten drücke, wie F10 oder so, dann führt er die _getchar() aus <conio.h> (Windows?) Funktion doppelt aus.
Wie kann ich das abfangen?
Natürlich möchte ich auch wissen, wenn der Anwender SOndertasten verwendet.
Hier ist der Code:
#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <string.h>
//#include <windows.h>
#include <conio.h> // _getch()using namespace std;
int test(void);int main(void)
{// test();
char Character = 0;
for (int i=0;i<10;i++)
{
printf("Please Input Character: ");Character = (char) _getch();
printf("\n\n");
printf("You have pushed: %i\n\n",int(Character));
}return 0;
}
-
Hi!
Jepp, bei Sondertasten kommt erst ne 0 oder ne 224 vorweg. In dem Fall musst du getch() ein zweites mal aufrufen, wenn du wissen möchtest welche Taste das ist.
Guckst du hier:
#include <stdio.h> #include <conio.h> #define F1 59 #define F2 60 // ... #define LEFT 75 #define RIGHT 77 // ... void key_switch ( int c ) { switch (c) { case F1: puts("F1"); // F1 Taste break; case LEFT: puts("left"); // Pfeiltaste links. break; default: puts("unhandled"); break; } } int main (void) { int c = 0; int special_key = 0; while ( c != 'q' ) { special_key = 0; c = getch (); if ( c == 224 ) { printf ( "c = 224 -> " ); c = getch (); special_key = 1; printf ("dec: %d ", c ); // Nummer der Sondertaste. } if ( c == 0 ) { printf ( "c = 0 -> " ); c = getch (); special_key = 1; printf ("dec: %d ", c ); // Nummer der Sondertaste. } if ( special_key ) key_switch(c); else printf ( "%c %d\n", c, c ); } return 0; } Leider tut sich bei einigen Tasten gar nichts, wenn sie als einzige Taste gedrückt werden ( Shift, AltGr, Strg ) usw. Dafür kannst du aber ReadConsoleInput (Windows) oder ne Funktion aus NCurses (Linux) nehmen. Gruß, B.B.
-
Big Brother schrieb:
Hi!
Jepp, bei Sondertasten kommt erst ne 0 oder ne 224 vorweg. In dem Fall musst du getch() ein zweites mal aufrufen, wenn du wissen möchtest welche Taste das ist.
Guckst du hier:
Gruß,
B.B.
[/cpp]Danke für die tolle Funktion!
Sie macht genau das, was ich wollte.
In Pascal gab es mal einen Algorithmus mit LOW und HIGH, hab ich aber vergessen, wie das damals genau war.
Gruß Pascal2009