getch 返回-1?
他们询问如何捕获 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() ?
They asked how to capture keys such as F11 or insand getchr does not return anything for those keys, and there is nothing I can find working that accepts raw input from input events..
I am now trying ncurses/curses in a C++ program to capture these keys.
My program to test is simple, it is basically:
#include <stdlib.h>
#include <stdio.h>
#include <curses.h>
int main() {
int car;
while(c != '\b') {
c = getch();
printf("%i", c);
}
return 0;
}
I use it of course the same as another getch() function, but it returns -1
infinite times.. I am using a recent kernel in Arch linux, in a standard terminal (tested in xterm
as well)
Is there a certain switch I need to switch on in order to use this getch() in the libraries?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在调用
getch()
之前,您需要调用initscr();
来初始化curses。此外,您可能需要非行缓冲模式,因此您还应该调用 cbreak(); noecho();(echo 模式不应与 cbreak 模式一起使用)。
You need to call
initscr();
to initialise curses before callinggetch()
.In addition, you probably want non-line-buffered mode, so you should also call
cbreak(); noecho();
(echo mode should not be used with cbreak mode).