清除键盘缓冲区

5
在函数boo()中,我按下一个键,然后调用函数doSthTimeConsuming()
现在我在doSthTimeConsuming()期间按键。 问题是键被缓冲,在下一次迭代中boo()将已经有一个输入。
我能否先在boo()中清除或禁用键盘缓冲?
void boo()
{
    while(1)
    {
        c = getch();

        switch(c)
        ...
        break;
    }
}

void doSthTimeConsuming()
{
    usleep(1000000);
}

int main()
{
    WINDOW* main_win = initscr();
        cbreak();
        noecho();
        keypad(main_win, TRUE);

    while(1)
    {
        boo();
        doSthTimeConsuming();
    }

    return 0;   
}

编辑:我找到了一个解决方法,但我仍在寻找清除缓冲区的解决方案。


@bits_international 它不起作用。我认为条件c=='\n' OR c==EOF在这里没有意义。你能解释一下吗? - Rob
我是指在这个上下文中。你可以清楚地看到我正在使用 cbreak();。你的代码如何帮助?它不起作用。 - Rob
在这个回复中,您可以找到一种清除缓冲区的便携式方法:https://stackoverflow.com/a/13987787/1817986 - David
2个回答

8

1

在接收到输入后,我使用 keypad(main_win, FALSE); 解决了问题,并在需要时启用 keypad(main_win, TRUE);

void boo()
{
    keypad(main_win, TRUE);
    while(1)
    {
        c = getch();

        switch(c)
        ...
        break;
    }
    keypad(main_win, FALSE);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接