如何在C语言中使用curses库检测箭头键的按下?

21
在尝试通过curses(ncurses)获取箭头键输入时,它不会被捕获为KEY_UP等。我使用了带有true参数的keypad功能,但getch仍然返回了一个转义序列。如何穿过getch()返回的值,并特别抓取箭头键?

1
截至2023年,在此是解决方案。 - Scott
3个回答

23

我在Mac OS X上遇到了相同的问题。但是通过添加以下内容解决了这个问题:

keypad(stdscr, TRUE);

这样做并将 getch 存储为 int 对我很有效。 - bpisano
1
这并没有回答问题。 - Thomas Dickey

19

我在存储getch()调用时使用的是char,而实际上应该是int。在更改后完美运行。


实际上,这个问题本应该被关闭,因为它没有展示出能够演示问题的程序。 - Thomas Dickey

9

标准(类似VT100)终端在按下箭头键时发送一系列字符。您只需跟踪这些字符是否按顺序按下即可。以下是要注意的字符:

Down Arrow  0x1B 0x5B 0x42
Left Arrow  0x1B 0x5B 0x44
Right Arrow 0x1B 0x5B 0x43
Up Arrow    0x1B 0x5B 0x41

1
你能使用Ctrl键输入哪些转义码作为键组合或序列呢? - Sean A.O. Harney
0x1B = esc,0x5B = [,0x41 - 0x44 = A - D。在终端中键入esc[D,光标将向左移动。 - Ryan Ballantyne
23
这种方法基本上完全违背了使用curses库的初衷 :-) - Andrew Y
这并没有回答问题。 - Thomas Dickey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接