更新时间:2021-10-03 07:05:32
你可以使用 nodelay()
函数将 getch()
变成非阻塞调用,如果没有可用的按键,则返回 ERR
.如果按键可用,则它会从输入队列中拉出,但如果您愿意,可以使用 ungetch()
将其推回到队列中.
You can use the nodelay()
function to turn getch()
into a non-blocking call, which returns ERR
if no key-press is available. If a key-press is available, it is pulled from the input queue, but you can push it back onto the queue if you like with 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
", getch());
refresh();
} else {
printw("No key pressed yet...
");
refresh();
sleep(1);
}
}
}