我一直在寻找类似于kbhit()
的等效函数,我已经阅读了几个讨论该主题的论坛,并且大多数人似乎建议使用ncurses。
如何使用ncurses在C++中检查是否按下键?
由ncurses提供的getch()
函数从窗口读取字符。
我想编写一个只检查是否有按键按下的函数,然后再进行getch()
操作。
我一直在寻找类似于kbhit()
的等效函数,我已经阅读了几个讨论该主题的论坛,并且大多数人似乎建议使用ncurses。
如何使用ncurses在C++中检查是否按下键?
由ncurses提供的getch()
函数从窗口读取字符。
我想编写一个只检查是否有按键按下的函数,然后再进行getch()
操作。
你可以使用nodelay()
函数将getch()
变成非阻塞调用,如果没有按键,则返回ERR
。如果有按键,则从输入队列中拉取它,但是你可以使用ungetch()
将其推回队列中。
#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);
}
}
}
timeout()
,它有一些有趣的特性。如果 t 是正数,它将等待那么多毫秒;如果是负数,则会阻塞。getch()
在没有输入时会返回ERR
,就像你所说的那样。 - Pryftan