我正在编写一个使用getch()来扫描箭头键的程序.到目前为止,我的代码是:

switch(getch()) {
    case 65:    // key up
        break;
    case 66:    // key down
        break;
    case 67:    // key right
        break;
    case 68:    // key left
        break;
}

问题是,当我按下'A''B''C''D'时,代码也会被执行,因为65'A'的十进制代码,以此类推...

有没有不打电话给别人就能判断箭头键的方法?

谢谢!

推荐答案

按一个箭头键getch将三个值推入缓冲区:

  • '\033'
  • '['
  • 'A''B''C''D'

因此,代码将如下所示:

if (getch() == '\033') { // if the first value is esc
    getch(); // skip the [
    switch(getch()) { // the real value
        case 'A':
            // code for arrow up
            break;
        case 'B':
            // code for arrow down
            break;
        case 'C':
            // code for arrow right
            break;
        case 'D':
            // code for arrow left
            break;
    }
}

C++相关问答推荐

无法删除C中文件夹内的文件

使用相同的内存地址,但代码在程序内存中额外占用 8 个字节?

将“int_least8_t”转换为“char”时如何发出警告?

强制转换为“超类”并返回 C 是否违反严格别名?

如何在 C 中的结构数组中使用动态二维数组?

在 Macbook M1 上为 Tensorflow 安装 C API

C 中使用数组、推送、弹出和显示的堆栈实现

在没有辅助函数的情况下转换函数指针参数

如何使用带有 typedef 的注册存储类?

Vmware Workstation 的 libusb_control_transfer 非常慢

使用 strstr 查找子字符串的所有实例会导致奇怪的字符串格式

假设指向同一个变量的两个指针是非法的/UB,为什么 C 编译器不能优化更改 const 指针的值?

绝对值 abs(x) 使用按位运算符和布尔逻辑

为什么不鼓励静态链接 glibc?

C/C++ 中的 const 数组和静态 const 数组有什么区别

为什么在启用 GCC 优化的情况下,这段代码使用 strlen 的速度要慢 6.5 倍?

“for”循环内的“for”循环可以使用相同的计数器变量名吗?

“使用带二进制位运算符的有符号整数操作数” - 使用无符号短时

在 POSIX 系统上 argc 可以为零吗?

为什么要在 C 和 C++ 项目中创建 include/ 目录?