GetAsyncKeyState创建cin问题

时间:2011-12-11 23:58:57

标签: c++ windows visual-c++ console-application

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

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

这一点,单独工作正常。问题是在我的Play()方法中,我有一个cin语句就在那个蝙蝠上,菜单()中的'1'进入我的Play()。我试过cin.clear()无济于事,而cin.ignore(...)阻止了从Menu()到Play()的瞬间变化。有什么办法可以防止这种情况发生吗?

1 个答案:

答案 0 :(得分:3)

在致电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