我目前正在为学校创建一个控制台游戏,但在主菜单中使用GetAsyncKeyState时遇到了麻烦。我的主菜单运行在一个无限循环中,一旦按下某个键,该循环只会中断一次。例如,我有:

if(GetAsyncKeyState('1'))
{
    Play();
    break;
}

单独使用,效果很好。问题在于,在我的Play()方法中,该 bat 旁边有一个cin语句,并且Menu()中的“1”进入了Play()中。我尝试了cin.clear()无济于事,并且cin.ignore(...)阻止了从Menu()到Play()的瞬时更改。有什么办法可以防止这种情况的发生?

最佳答案

在调用Play()之前尝试一下

FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));

另外,在使用GetAsyncKeyState时,您应该屏蔽掉除高位以外的所有内容,如下所示:
if ((GetAsyncKeyState('1') & 0x8000) != 0)

请参阅“返回值”下的文档以了解原因:http://msdn.microsoft.com/en-us/library/windows/desktop/ms646293%28v=vs.85%29.aspx

09-11 20:48