[英]how to detect the ESC key in C?
我寫了一段代碼來使用_getch();
檢測箭頭鍵_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();
)但我不知道對於轉義鍵,我嘗試搜索但沒有找到它們,完整列表那些會很有幫助。
謝謝。
Up,Down,Left,Right
被稱為擴展鍵,要檢測它們,您必須讀取兩個Char
第一個是Null
,第二個是ASCII
代碼,但ESC
不是擴展鍵,因此您只能使用一個char
來檢測它。
我希望該代碼可以幫助您:
#include <stdio.h>
#include <stdlib.h>
#define esc 27
int main()
{
char ch;
do
{
ch = getch();
switch(ch)
{
case esc:
// your logic goes here
break;
}
}
while(exitflag != 1);
}
我想你混淆了Esc
與通用術語“轉義序列”,其中一個特定值用於表示隨后沒有他們通常的含義,價值觀的關鍵-而且往往是ESC
值27
來做到這一點,但在這種情況下不是。
當您按下箭頭(和其他非打印)鍵時, _getch()
從連續調用中返回兩個值。 第一個值是0
或224
,它充當“轉義”字符以指示下一次調用將通知實際按下的鍵。
您發布的代碼不檢測箭頭鍵,它檢測鍵'H'
, 'P'
, 'K'
和'M'
,盡管我懷疑第一個_getch()
旨在讀取轉義值。
當我運行以下程序並按1
、 Up-arrow
、 Esc
#include <stdio.h>
#include <conio.h>
int main(void)
{
int k;
do {
k = _getch();
if (k == 0 || k == 224) { // 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
結論:我建議您檢測0
,然后使用嵌套的switch
語句來確定按下了哪個非打印鍵。
這個問題的一般解決方案是只打印出 c 設置的值。 這樣,您按下的任何鍵都可以獲得其值。
default:
printf("Key pressed has value = %d\n",c);
break;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.