fatch()関数は、FatalErrorのコメントに記載されているように、矢印キー(およびその他の特殊キー)に対して2つのキーコードを返します。最初に0(0x00)または224(0xE0)のいずれかを返し、次に押されたキーを識別するコードを返します。
矢印キーの場合、最初に224を返し、次に72(上)、80(下)、75(左)、77(右)を返します。NumLockの矢印キー(NumLockがオフの状態)が押されると、getch()は224ではなく0を最初に返します。
getch()は標準化されておらず、これらのコードはコンパイラーごとに異なる可能性があることに注意してください。これらのコードは、Windows上のMinGWおよびVisualC++によって返されます。
さまざまなキーに対するgetch()のアクションを確認するための便利なプログラムは次のとおりです。
#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);
}
これは、MinGWおよびVisualC++で機能します。これらのコンパイラは、getch()の代わりに_getch()という名前を使用して、それが非標準関数であることを示します。
したがって、次のようなことを行うことができます。
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 ... */
}
}