Problem beim einlesen von Pfeiltasten
-
Ich versuche mit getch Pfeiltasten einzulesen, und das Funktioniert auch für den Nummernblock rechts (ohne Numlock) ganz gut, aber für die vier einzelnen Pfeiltasten scheint was nicht zu gehen, da bei denen die Escape-Sequenz , <0> fehlt; es wird also nur (char)72, 75, .. zurückgegeben, was dann nicht zu unterscheiden ist von einem 'H', 'K','M' oder 'P'.
ich benutzte folgenden code um die eingabe auslesen und zu Testzwecken auszugeben:unsigned short ch; while(true){ ch=_getch(); gotoxy(sub(1),sub(40)); cout<<" \n "; gotoxy(sub(1),sub(40)); cout<<(int)(ch)<<'\n'<<ch; if(ch==(char)32){break;} if((ch==(char)0)|(ch==(char)0xE0)){ ch=_getch(); cout<<" "<<(int)ch; } }
stimmt das so, oder muss ich den Fehler woanders suchen?
-
unsigned short ch; while(true){ ch=_getch(); gotoxy(sub(1),sub(40)); cout<<" \n "; // ein leerzeichen reicht für bis zu dreistellige zahlen nicht gotoxy(sub(1),sub(40)); cout<<(int)(ch)<<'\n'<<ch; if(ch==(char)32){break;} if((ch==(char)0)|(ch==(char)0xE0)){ // hier gehört || und nicht | ch=_getch(); cout<<" "<<(int)ch; } }
Siehe Kommtentare.
MfG SideWinder
-
Vielleicht liegt es daran, dass du "unsigned short" anstatt "int" verwendest. Ich benutze zwar "wint_t wChar = _getwch();", aber da funktioniert "wChar == 0xE0" so, wie es soll.
@Sidewinder: "|" statt "||" ist durchaus in Ordnung - das hat er wohl aus Java
-
Ich hab ch jetzt auf int geändert, und die Leerzeichen sind in meinem Code eigentlich auch mehr
dennoch bleibt der Fehler bestehen; bei den vier Pfeilen gehts net, bei anderen sonderTasten wie dem Nummernblock oder F1 usw liefert er ordentlich 0 + x
-
Versuch mal "ch == 0x0E", also ohne Cast.
-
die escape-sequenz ist bei diesen Pfeiltasten 224, 0xE0. Es lag also an der Typumwandlung..
Vielen Dank Sidewinder und Neku
-
ach verd**t