简单的代码来理解问题:
string op;
int main()
{
cout<<"hi";
op=getch(); // or cin>>op
delay(2000) // delay for 2 sec.
cout<<endl<<" bye";
op=getch(); // or cin>>op
system("cls");
cout<<" MAGIc !! !!";
return 0;
}
此代码应该做的是:
假设有两个用户:用户A和用户B.
假设用户A按下'a'键然后等待两秒钟直到显示“再见”,然后再次按'a'然后看到屏幕清晰并且“魔术”被打印。用户A很好,没有问题。
但让我们的用户B不耐烦。用户B看到“hi”并立即按两次'a'。然后两秒后,他只看到“魔术”这个词。他永远不会看到“再见”因为屏幕立即被清除了!
所以问题是:如果一个不耐烦的用户在打印“再见”之前按下了太多的键,我该如何阻止第二个getch()
获取输入,这样他们就必须在<<>之后按 打印“bye”并在之前清除屏幕?
答案 0 :(得分:1)
int main()
{
cout<<"hi";
op=getch();
Delay(2000);
cout<<endl<<" bye";
FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE)); // flushing the buffer
op=getch(); // or cin>>op
system("cls");
cout<<" MAGIc !! !!";
return 0;
}
以上用户甚至可以输入4次,一切都会好起来。