使用<ncurses.h>为Linux编写我自己的kbhit版本

时间:2018-11-01 03:08:44

标签: c++ ncurses

bool kbhit(void)
{
   // function without the 4 lines of code below will not work
   // but they also screw up the console
   initscr();             
   cbreak();
   noecho();
   nodelay(stdscr, TRUE);

    scrollok(stdscr, TRUE);
    int ch = getch();
    if (ch != ERR) {
        ungetch(ch);
        refresh();
        return true;
    } else {
        refresh();
        return false;
    }
}

由于ncurses没有kbhit,因此我发现了上面的功能。但是他们搞砸了控制台。这是我尝试打印以下内容时发生的情况: 查看图片enter image description here

1 个答案:

答案 0 :(得分:1)

这就是所谓的“楼梯”。

mount 的示例开始了诅咒,但没有退出诅咒(使用 shallowMount )。如果您的程序尝试使用诸如 kbhit 之类的非诅咒调用,则终端仍将处于原始模式-退出shell后,该模式将继续存在(除非重置终端)。