如何在C中检测ESC键?

时间:2015-12-10 19:12:19

标签: c

我写了一段代码来检测使用_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();)但我不知道对于转义键,我尝试搜索但没有找到它们,完整的列表将非常有用。

感谢。

4 个答案:

答案 0 :(得分:5)

Up,Down,Left,Right被称为扩展密钥,为了检测它们,您必须阅读两个Char,第一个是Null,第二个是ASCII代码但{{1} }}不是扩展键,因此您只能使用一个ESC来检测它。

我希望代码能为您提供帮助:

char

答案 1 :(得分:3)

ASCII中的

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 返回的值。

Here's an ASCII table

答案 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()01

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 语句来确定哪个非打印键已被按下。