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%dn", readch()); } close_keyboard(); return 0;}
文人墨客
键盘 Key Code 对照表
相关文章:HTML ASCII 参考手册
文人墨客
参考地址