我写了一段代码来检测使用_getch();
的箭头键,我也希望检测esc键,但我实际上并不知道我应该使用哪些数字,所以任何帮助都会受到赞赏。
#include <conio.h>
#include <stdio.h>
#define KEY_UP 72
#define KEY_DOWN 80
#define KEY_LEFT 75
#define KEY_RIGHT 77
int c = 0;
_getch();
switch ((c = _getch())) {
case KEY_UP:
printf("Up\n");
break;
case KEY_DOWN:
printf("Down\n");
break;
case KEY_LEFT:
printf("Left\n");
break;
case KEY_RIGHT:
printf("Right\n");
break;
default:
printf("Null\n");
break;
每个箭头键是ascii代码224和定义的两个字符的组合(注意第一个_getch();
)但我不知道对于转义键,我尝试搜索但没有找到它们,完整的列表将非常有用。
感谢。
答案 0 :(得分:5)
Up,Down,Left,Right
被称为扩展密钥,为了检测它们,您必须阅读两个Char
,第一个是Null
,第二个是ASCII
代码但{{1} }}不是扩展键,因此您只能使用一个ESC
来检测它。
我希望代码能为您提供帮助:
char
答案 1 :(得分:3)
ESC 为#define ESC 27
。
因此,您需要_getch
并检查Date and Time Close dif
2015/01/01 17:00:00.211 2030.25 0.3
2015/01/01 17:00:02.456 2030.75 0.595137615
2015/01/01 23:55:01.491 2037.25 2.432613592
2015/01/02 00:02:01.955 2036.75 -0.4
2015/01/02 00:04:04.887 2036.5 -0.391144414
2015/01/02 15:14:56.207 2021.5 -4.732676608
2015/01/05 15:14:59.020 2021.5 -4.731171953
2015/01/05 17:00:00.105 2020.5 0
2015/01/05 17:00:01.077 2021 0.423093923
返回的值。
答案 2 :(得分:2)
这个问题的一般解决方案是打印出设置为的值c。这样你按下的任何键都可以获得值。
default:
printf("Key pressed has value = %d\n",c);
break;
答案 3 :(得分:2)
我认为您将Esc
键与通用术语“转义序列”混淆,其中使用特定值来表示后面的值不具有其通常含义 - 通常是{{1用于执行此操作的值ESC
,但在这种情况下不会。
当您按下箭头(和其他非打印)键时,27
会从连续调用中返回两个值。第一个值是_getch()
,它充当“转义”字符,表示下一个调用将通知按下的实际键。
您发布的代码未检测到箭头键,它会检测到键0
,'H'
,'P'
和'K'
,但我怀疑是第一个{{ 1}}旨在读取'M'
转义值。
当我运行以下程序并按下按键_getch()
,0
,1
Up-arrow
我得到以下输出:
Esc
结论:我建议您检测#include <stdio.h>
#include <conio.h>
int main(void)
{
int k;
do {
k = _getch();
if (k == 0) { // Escape sequence?
printf("Special key: ");
k = _getch(); // read again
}
printf("%d\n", k); // print numeric key value
} while (k != 27); // end when Esc pressed
return 0;
}
,然后使用嵌套的49
Special key: 72
27
语句来确定哪个非打印键已被按下。