【发布时间】:2011-12-11 23:58:57
【问题描述】:
我目前正在为学校创建一个控制台游戏,但在我的主菜单中使用 GetAsyncKeyState 时遇到了问题。我的主菜单在无限循环中运行,只有在按下一个键时才会中断。例如我有:
if(GetAsyncKeyState('1'))
{
Play();
break;
}
仅此一项,就可以正常工作。问题是,在我的 Play() 方法中,我有一个 cin 语句,并且 Menu() 中的“1”进入了我的 Play()。我试过 cin.clear() 无济于事,而 cin.ignore(...) 阻止了从 Menu() 到 Play() 的瞬时变化。有什么办法可以防止这种情况发生吗?
【问题讨论】:
-
用户的肘部放在“1”键上。当您要求输入时,您希望显示什么?想一想,你不能两全其美。
-
请注意,您正在错误地检查
GetAsyncKeyState的返回值。但这里的问题是,您的程序在用户放开“1”键之前就已经向前推进了。您可能应该等到按键被释放后再退出菜单。 -
GetAsyncKeyState读取键盘状态,即使您的应用程序没有焦点。您可能希望使用GetNumberOfConsoleInputEvents和ReadConsoleInput(或旧的 conio.h 接口)来只读控制台输入。
标签: c++ windows visual-c++ console-application