这是我的代码
当我按Enter键为n插入一个值时,它立即移动到下一个循环 没有按第二次 我试着用cin.clear(),cin.syns()来清理缓冲区......但它不起作用
任何人都知道为什么以及如何解决它
感谢
int main() {
bool isNotExit=true;
do {
isNotExit=menu();
} while( isNotExit );
return 0;
}
bool menu() {
int n;
do {
cout<<"n = "<<endl;
cin>>n;cin.ignore(1);
} while( n!=1&&n!=2&&n!=3 );
switch( n ) {
case 1:
{
cout<<"Press enter to continue"<<endl;
bool enter=false;
do {
if( GetAsyncKeyState(VK_RETURN)&0x8000 ) enter=true;
} while( enter==false );
return true;
}
break;
case 2:
{
return true;
}
break;
case 3:
{
return false;
}
break;
}
}
答案 0 :(得分:-1)
它发生的原因是系统特定的。我无法在计算机上重现这个问题,但我想这就是这一行:
if( GetAsyncKeyState(VK_RETURN)&0x8000 ) enter=true;
在系统意识到你已经发布'Enter'进入n
之前,它已经在上面指定的行中检查了它。试试这个:
case 1:
{
sleep(1); // Proof of concept
cout<<"Press enter to continue"<<endl;
bool enter=false;
do {
if( GetAsyncKeyState(VK_RETURN)&0x8000 ) enter=true;
} while( enter==false );
return true;
}