C++ 使用ncurses在unix中创建一个检查按键的函数
我一直在寻找一个与kbhit()等价的工具,我已经阅读了几个关于这个主题的论坛,大多数人似乎建议使用ncurses <>我应该如何检查一个键是否用C++来压缩?< /P> ncurses提供的函数getch()从窗口读取字符。 我想写一个函数,只检查是否有按键,然后我想做getch()C++ 使用ncurses在unix中创建一个检查按键的函数,c++,unix,command-line,ncurses,C++,Unix,Command Line,Ncurses,我一直在寻找一个与kbhit()等价的工具,我已经阅读了几个关于这个主题的论坛,大多数人似乎建议使用ncurses 我应该如何检查一个键是否用C++来压缩?< /P> ncurses提供的函数getch()从窗口读取字符。 我想写一个函数,只检查是否有按键,然后我想做getch() 提前感谢。您可以使用nodelay()函数将getch()转换为非阻塞调用,如果没有可用的按键,该调用将返回ERR。如果按键可用,则会将其从输入队列中拉出,但如果愿意,可以使用ungetch()将其推回到队列中 #包
提前感谢。您可以使用
nodelay()
函数将getch()
转换为非阻塞调用,如果没有可用的按键,该调用将返回ERR
。如果按键可用,则会将其从输入队列中拉出,但如果愿意,可以使用ungetch()
将其推回到队列中
#包括
#包含/*仅用于睡眠()*/
int kbhit(无效)
{
int ch=getch();
如果(ch!=错误){
未蚀刻(ch);
返回1;
}否则{
返回0;
}
}
内部主(空)
{
initscr();
cbreak();
noecho();
节点延迟(stdscr,真);
scrollok(stdscr,TRUE);
而(1){
if(kbhit()){
printw(“按键!它是:%d\n”,getch());
刷新();
}否则{
printw(“尚未按下任何键…\n”);
刷新();
睡眠(1);
}
}
}
您还可以使用timeout()
,它有一些有趣的特性。也就是说,如果t为正,它会等待那么多毫秒;如果是负数,它会阻塞getch()
在您所说的案例中没有输入时,将返回ERR
。
#include <ncurses.h>
#include <unistd.h> /* only for sleep() */
int kbhit(void)
{
int ch = getch();
if (ch != ERR) {
ungetch(ch);
return 1;
} else {
return 0;
}
}
int main(void)
{
initscr();
cbreak();
noecho();
nodelay(stdscr, TRUE);
scrollok(stdscr, TRUE);
while (1) {
if (kbhit()) {
printw("Key pressed! It was: %d\n", getch());
refresh();
} else {
printw("No key pressed yet...\n");
refresh();
sleep(1);
}
}
}