You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用conio.h时如何对不同F功能键及方向键的按键输入进行标记识别

问题原因

conio.h 提供的 getch() 函数处理普通按键(字母、数字、回车、ESC等)时只会返回一个对应ASCII值,但处理方向键、F功能键这类扩展按键时,会连续返回两个值:

  • 第一个返回值是固定先导码,通常为 0 或 224,仅用于标识当前按下的是扩展键
  • 第二个返回值是该扩展键独有的扫描码,可用于区分不同的扩展键
    你当前代码只读取了第一个返回值,才会出现不同扩展键返回值相同的问题。

常见扩展键扫描码参考

  • 方向上:72
  • 方向下:80
  • 方向左:75
  • 方向右:77
  • F1:59
  • F2:60
  • F3:61
  • F4:62
  • F5:63
  • F6:64
  • F7:65
  • F8:66
  • F9:67
  • F10:68
  • F11:133
  • F12:134

修正后代码示例

#include <stdio.h>
#include <conio.h>

int main() {
    int ch = getch();
    // 先判断是不是扩展键先导码
    if (ch == 0 || ch == 224) {
        // 读取第二个扫描码做判断
        int scan_code = getch();
        switch (scan_code) {
            case 75:
                printf("LEFT ARROW");
                break;
            case 72:
                printf("UP ARROW");
                break;
            case 77:
                printf("RIGHT ARROW");
                break;
            case 80:
                printf("DOWN ARROW");
                break;
            case 59:
                printf("F1");
                break;
            case 60:
                printf("F2");
                break;
            // 按需补充其他F键、扩展键的case
            default:
                printf("OTHER EXTENDED KEY, SCAN CODE: %d", scan_code);
                break;
        }
    } else {
        // 普通按键走原有逻辑
        switch (ch){
            case 13:
                printf("ENTER");
                break;
            case 27:
                printf("ESC");
                break;
            case 48 ... 57: // 范围写法简化数字判断,主流编译器均支持
                printf("digit");
                break;
            case 97 ... 122:
                printf("LOWERCASE LETTER");
                break;
            // 按需补充其他普通按键的case
            default:
                printf("OTHER KEY, CODE: %d", ch);
                break;
        }
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者Geliebten

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 05:48:00