我正在编写一个使用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++相关问答推荐

在使用GTK 4 Columnview列表模型时,如何为多列添加排序函数.C编码,Linux/GNOME环境

为什么GCC在每次循环迭代时都会生成一个数组的mov&S使用[]访问数组?(-03,x86)

在C++中头文件中声明外部 struct

当我更改编译优化时,相同的C代码以不同的方式运行

二进制计算器与gmp

非正规化边缘毛刺

轮询libusb_pollfd struct 列表的正确方式是什么?

Clang警告称,`ffi_type`与`sizeof`不兼容

如何在C语言中正确打印图形

为什么中断函数会以这种方式影响数组?

等同于铁 rust 的纯C语言S未实现!()宏

运行时错误:在索引数组时加载类型为';char';`的空指针

`预期说明符-限定符-列表在‘(三元运算符中的’token`‘之前

如何使用空元素块声明指针数组

如何在C中定义指向函数的指针并将该指针赋给函数?

unions 的原子成员是个好主意吗?

生成的头文件不包括用户定义的文件

在我的函数中实现va_arg的问题

在链表中插入一个值

初始化动态分配的布尔二维数组的最佳方法是什么?