Funkcja getch() zwraca dwa kody klawiszy dla klawiszy strzałek (i kilku innych specjalnych klawiszy), jak wspomniano w komentarzu do FatalError. Najpierw zwraca 0 (0x00) lub 224 (0xE0), a następnie zwraca kod identyfikujący naciśnięty klawisz.
Dla klawiszy strzałek zwraca najpierw 224, następnie 72 (w górę), 80 (w dół), 75 (w lewo) i 77 (w prawo). Jeśli klawisze strzałek z kluczem numerycznym (z wyłączonym NumLock wyłączone) są naciśnięte, getch() zwraca najpierw 0 zamiast 224.
Należy pamiętać, że getch() nie jest w żaden sposób standaryzowany, a kody te mogą różnić się od kompilatora do kompilator. Kody te są zwracane przez MinGW i Visual C++ w systemie Windows.
przydatny program, aby zobaczyć działanie getch() dla różnych kluczy jest:
#include <stdio.h>
#include <conio.h>
int main()
{
int ch;
while ((ch = _getch()) != 27) /* 27 = Esc key */
{
printf("%d", ch);
if (ch == 0 || ch == 224)
printf (", %d", _getch());
printf("\n");
}
printf("ESC %d\n", ch);
return (0);
}
Działa to dla MinGW i Visual C++. Kompilatory używają nazwy _getch() zamiast getch(), aby wskazać, że jest to funkcja niestandardowa.
Tak, można zrobić coś takiego:
ch = _getch();
if (ch == 0 || ch == 224)
{
switch (_getch())
{
case 72:
/* Code for up arrow handling */
break;
case 80:
/* Code for down arrow handling */
break;
/* ... etc ... */
}
}
Minęły lata, odkąd się z tym bawiłem, to wcale nie jest zestandaryzowane ... ale z powrotem, kiedy grałem z 'getch()', dla "specjalnych" kluczy faktycznie wrócił dwa razy. Za pierwszym razem zwrócił 0, a następnie kod specjalnego klucza, aby można było go odróżnić od innych kluczy. – FatalError
'65' jest tylko dla znaku' A'. Aby otrzymać te klucze, musisz użyć kodów kontrolnych. Zobacz ten post. http://stackoverflow.com/questions/2876275/what-are-the-ascii-values-of-up-down-left-right –