【问题标题】:getch returns -1?getch 返回 -1?
【发布时间】:2011-05-13 14:02:54
【问题描述】:

他们询问如何捕获 F11 或 insand getchr 等键,这些键不返回任何内容,而且我找不到任何工作可以接受来自输入事件的原始输入。

我现在正在 C++ 程序中尝试使用 ncurses/curses 来捕获这些键。

我要测试的程序很简单,基本上是:

#include <stdlib.h>
#include <stdio.h>
#include <curses.h>
int main() {
    int car;
    while(c != '\b') {
        c = getch();
        printf("%i", c);
    }
    return 0;
}

我当然和另一个 getch() 函数一样使用它,但它会无限次返回 -1。我在标准终端中使用 Arch linux 中的最新内核(也在 xterm 中测试过)

我需要打开某个开关才能在库中使用这个 getch() 吗?

【问题讨论】:

    标签: c keyboard conio


    【解决方案1】:

    在调用getch()之前,你需要先调用initscr();来初始化curses。

    另外,你可能想要非行缓冲模式,所以你也应该调用cbreak(); noecho();(回显模式不应该与cbreak模式一起使用)。

    【讨论】:

    • 我不是 curses 专家,但您可能还想调用 keypad(stdscr, TRUE); 以便 ncurses 可以翻译特殊键转义序列并从 getch() 返回由 定义的方便值KEY_ 宏。例如if (getch() == KEY_F0+11) { /* f11 pressed */ }
    • 谢谢。由于某种原因,我的 FN 键在 Linux 上不起作用,所以我无法测试它们,但它确实适用于像 insert 和诸如此类的奇怪键。我希望我不需要从内核映射原始键盘输入来获取那些 fn+ ins 键和东西可以暂停:\
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-02
    • 2010-10-03
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多