嘿家伙我有一个问题,我一直在寻找答案,我已经看到很多问题,但没有解决我的问题 .
所以我有一个功能,使用这样的get line来抓取玩家的名字 .
std::cout << "Enter your name"<< std::endl;
std::string input;
std::getline(std::cin, input);
然后我有一个功能,它有一个菜单告诉用户他可以按一系列键移动到菜单的其他部分 .
while(true)
{
//menu one
if(GetAsyncKeyState(VK_CONTROL))
{
Menu_3();
}
//here is the problem
if(GetAsyncKeyState(VK_SHIFT) && GetAsyncKeyState(0x53)) //0X53 = S
{
Menu_4();
}
}
我的问题是,如果我使用带有大写字母的名称(使用SHIFT创建)和's',我输入名称后会自动调用Menu_4(),示例名称为“Shawn” . 如果我只有这样的名字“shawn”(不使用shift)那么“s”似乎存储在cin缓冲区中,所有需要继续前进的是按“shift”进入Menu_4();
基本上输入是从getline名称请求转移并且搞砸了我的GetAsyncKeyState()调用 .
谢谢你的帮助 .
2 回答
我认为你误解了GetAsyncKeyState的行为
见GetAsyncKeyState
可能你想检查当前状态,如果从上次通话中按下了键 .
您只是获取GetAsyncKeyState()的返回值,因此有效地执行
if(GetAsyncKeyState() != 0)
. 文档说因此,您当前检查是否现在按下了键,或者自上次调用GetAsyncKeyState后是否按下了键 . 如果您只想检查现在是否按下该键,则必须检查是否设置了返回值的最高位 .