【发布时间】:2013-06-03 05:53:00
【问题描述】:
我正在尝试使用 ESC 来逃避使用 getch() 的程序。我创建了一个小程序来演示我的问题。
#include <ncurses.h>
int main(void) {
int key = 0;
initscr();
noecho();
keypad(stdscr, TRUE);
do {
key = getch();
clear();
mvprintw(0, 0, "Key = %d\n", key);
refresh();
} while (key != 27);
clear();
refresh();
endwin();
return 0;
}
我正在尝试允许用户使用箭头键或键盘(哪个更方便)
问题出在小键盘上(numlock 是否打开)。当我编译并运行程序并尝试在这个简单的测试中使用小键盘键时,它会在我触摸小键盘键时立即退出。如果我删除 while (key != 27) (esc 为 27) 条件,它会读取键并显示它们的数字。为什么小键盘注册为时退出循环
ENTER 343
UP 120
DOWN 114
LEFT 116
RIGHT 118
非常感谢任何帮助!
【问题讨论】:
-
您的程序将有效地仅显示多字节转义序列的最后一个字节,如果您没有将键盘设置为 true,则会发送该字节。由于此类序列以转义开头,它们将导致您的程序退出。我对值 114、116、118 和 120 感到困惑;它们对应于哪些键盘数字?
-
尝试在调用 initscr() 之前添加
setenv("ESCDELAY","1000");。如果不起作用,请尝试更大的值而不是 1000。 -
您的 TERM 环境变量设置为什么,您在哪个终端上运行测试?
标签: c linux bash ncurses getch