Ncurses并关闭输入接收

时间:2013-12-28 20:09:37

标签: c input ncurses

在程序启动过程的开始,有一种简短的介绍,其中字符移动,框慢慢出现等等。之后,正常的功能正在激活,它正在等待用户的输入(getstr(prompt);)。但是,如果我在加载简介时按任意键,输入会自动传送到提示字符串,这是不可取的。如何关闭从输入读取到getstr(prompt);之前的一行,然后激活它?或者可能有不同的方法来解决这个问题?我的想法是使用这样的阻塞函数(不确定它甚至可以工作):

timeout (1);
while (intro == 1)
{
   continue;
}
timeout (-1);

但我认为一直检查这个论点并不是处理问题的优雅方式。

1 个答案:

答案 0 :(得分:0)

我认为你想要的答案是flushinp()。

从手册页

  

flushinp例程会丢弃任何已键入的类型   由用户使用,尚未被该程序读取。

https://developer.apple.com/library/ios/documentation/System/Conceptual/ManPages_iPhoneOS/man3/flushinp.3x.html

以下是一个可能符合您使用情况的示例

#include <stdlib.h>
#include <curses.h>

void atexit_cb(void) {
    endwin();
}

int main(void)
{
    // initialize curses
    initscr();
    raw();
    keypad(stdscr, TRUE);
    noecho();
    nodelay(stdscr, FALSE);
    atexit(atexit_cb);

    // show an intro for 3 seconds
    for (int i = 0; i < 3; i++) {
        mvprintw(i, 0, "...Intro text...");
        refresh();
        napms(1000);
        move(i, 0);
        clrtoeol();
    }

    // flush typeahead
    flushinp();

    // now get some new input
    printw("Press a key...");
    echo();
    getch();
    return 0;
}