#define KEY_UP 72
#define KEY_DOWN 80
#define KEY_LEFT 75
#define KEY_RIGHT 77
int main()
{
int c = 0;
while (c != 27) //esc key code
{
c = 0;
switch (c = _getch())
{
case KEY_UP:
cout << endl << "Up" << endl;//key up
break;
case KEY_DOWN:
cout << endl << "Down" << endl; // key down
break;
case KEY_LEFT:
cout << endl << "Left" << endl; // key left
break;
case KEY_RIGHT:
cout << endl << "Right" << endl; // key right
break;
default:
cout << endl << "null" << endl;
break;
}
}
return 0;
}
输出应为
Up
Down
Left
Right
但我得到的是
null
Up
null
Down
null
Left
null
Right
根据输出,程序将读取其他关键代码,在读取实际的密钥代码之前我不知道它是什么,在此之前我没有cin
,为什么?任何解决方案?
答案 0 :(得分:3)
如果你选择read the fine manual,你会遇到这样的陈述:
当读取功能键或箭头键时,每个功能必须被调用两次;第一个调用返回0或
0xE0
,第二个调用返回实际的键代码。
这就是你怎么知道什么时候72表示向上箭头以及什么时候它是字母H
(恰好有一个ASCII码为72)。
答案 1 :(得分:0)
所做的更改:
我从switch语句中删除了default
。它导致空打印。
此外,我还添加了kbhit()
和#define KEY_ESC 27
,并将getch()
移到了switch语句的旁边。
#define KEY_UP 72
#define KEY_DOWN 80
#define KEY_LEFT 75
#define KEY_RIGHT 77
#define KEY_ESC 27
#include <conio.h>
#include <stdio.h>
#include <windows.h>
#include <iostream>
using namespace std;
int main()
{
int c = 0;
while ( c!= KEY_ESC ) //esc key code is 27
{
if (kbhit()) {
c = getch();
switch ( c )
{
case KEY_UP:
cout << endl << "Up" << endl;//key up
break;
case KEY_DOWN:
cout << endl << "Down" << endl; // key down
break;
case KEY_LEFT:
cout << endl << "Left" << endl; // key left
break;
case KEY_RIGHT:
cout << endl << "Right" << endl; // key right
break;
}//switch
}//if
}//while
return 0;
}