在程序启动过程的开始,有一种简短的介绍,其中字符移动,框慢慢出现等等。之后,正常的功能正在激活,它正在等待用户的输入(getstr(prompt);
)。但是,如果我在加载简介时按任意键,输入会自动传送到提示字符串,这是不可取的。如何关闭从输入读取到getstr(prompt);
之前的一行,然后激活它?或者可能有不同的方法来解决这个问题?我的想法是使用这样的阻塞函数(不确定它甚至可以工作):
timeout (1);
while (intro == 1)
{
continue;
}
timeout (-1);
但我认为一直检查这个论点并不是处理问题的优雅方式。
答案 0 :(得分:0)
我认为你想要的答案是flushinp()。
从手册页
flushinp例程会丢弃任何已键入的类型 由用户使用,尚未被该程序读取。
以下是一个可能符合您使用情况的示例
#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;
}