Windows システムの VS では _kbhit() 関数を使用してキーボードイベントを取得できます。使用時には conio.h ヘッダーファイルを追加する必要があります。例:

例

#include <conio.h> #include <iostream> using namespace std; int main() { int ch; while (1){ if (_kbhit()){//キーが押されていれば、_kbhit() 関数は真を返します ch = _getch();//_getch() 関数を使用して押されたキー値を取得します cout << ch; if (ch == 27){ break; }//ESC が押されたときにループします。ESC キーのキー値は 27 です。 } } system("pause"); }

Unix/Linux では、kbhit() 関数は提供されていません。自分で kbhit() プログラムを実装することができます。

例

#include <stdio.h> #include <termios.h> static struct termios initial_settings, new_settings; static int peek_character = -1; void init_keyboard(void); void close_keyboard(void); int kbhit(void); int readch(void); void init_keyboard() { tcgetattr(0,&initial_settings); new_settings = initial_settings; new_settings.c_lflag |= ICANON; new_settings.c_lflag |= ECHO; new_settings.c_lflag |= ISIG; new_settings.c_cc[VMIN] = 1; new_settings.c_cc[VTIME] = 0; tcsetattr(0, TCSANOW, &new_settings); } void close_keyboard() { tcsetattr(0, TCSANOW, &initial_settings); } int kbhit() { unsigned char ch; int nread; if (peek_character != -1) return 1; new_settings.c_cc[VMIN]=0; tcsetattr(0, TCSANOW, &new_settings); nread = read(0,&ch,1); new_settings.c_cc[VMIN]=1; tcsetattr(0, TCSANOW, &new_settings); if(nread == 1) { peek_character = ch; return 1; } return 0; } int readch() { char ch; if(peek_character != -1) { ch = peek_character; peek_character = -1; return ch; } read(0,&ch,1); return ch; } int main() { init_keyboard(); while(1) { kbhit(); printf("\n%d\n", readch()); } close_keyboard(); return 0; }