Create a function to check for key press in unix using ncurses

前端 未结 1 1177
猫巷女王i
猫巷女王i 2020-12-03 11:24

I have been looking for an equivalent to kbhit() and I have read several forums on this subject, and the majority seems to suggest using ncurses.

How should I go abo

相关标签:
1条回答
  • 2020-12-03 11:54

    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\n", getch());
                refresh();
            } else {
                printw("No key pressed yet...\n");
                refresh();
                sleep(1);
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题