Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用ncurses在unix中创建一个检查按键的函数_C++_Unix_Command Line_Ncurses - Fatal编程技术网

C++ 使用ncurses在unix中创建一个检查按键的函数

C++ 使用ncurses在unix中创建一个检查按键的函数,c++,unix,command-line,ncurses,C++,Unix,Command Line,Ncurses,我一直在寻找一个与kbhit()等价的工具,我已经阅读了几个关于这个主题的论坛,大多数人似乎建议使用ncurses 我应该如何检查一个键是否用C++来压缩?< /P> ncurses提供的函数getch()从窗口读取字符。 我想写一个函数,只检查是否有按键,然后我想做getch() 提前感谢。您可以使用nodelay()函数将getch()转换为非阻塞调用,如果没有可用的按键,该调用将返回ERR。如果按键可用,则会将其从输入队列中拉出,但如果愿意,可以使用ungetch()将其推回到队列中 #包

我一直在寻找一个与kbhit()等价的工具,我已经阅读了几个关于这个主题的论坛,大多数人似乎建议使用ncurses

<>我应该如何检查一个键是否用C++来压缩?< /P> ncurses提供的函数getch()从窗口读取字符。 我想写一个函数,只检查是否有按键,然后我想做getch()


提前感谢。

您可以使用
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);
        }
    }
}