簡體   English   中英

如何檢測C中的ESC鍵?

[英]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在 ASCII 中是27

因此,您需要#define ESC 27並檢查_getch返回的值。

這是一個 ASCII 表

我想你混淆了Esc與通用術語“轉義序列”,其中一個特定值用於表示隨后沒有他們通常的含義,價值觀的關鍵-而且往往是ESC27做到這一點,但在這種情況下不是。

當您按下箭頭(和其他非打印)鍵時, _getch()從連續調用中返回兩個值。 第一個值是0224 ,它充當“轉義”字符以指示下一次調用將通知實際按下的鍵。

您發布的代碼不檢測箭頭鍵,它檢測鍵'H''P''K''M' ,盡管我懷疑第一個_getch()旨在讀取轉義值。

當我運行以下程序並按1Up-arrowEsc

#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM