嘿,我有一個問題,我一直在尋找答案很長一段時間,我見過很多問題但都沒有解決我的問題。當使用GetAsyncKeyState()時,C++清除cin緩衝區
因此,我有一個函數,可以通過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」(不使用shift),那麼這個「s」似乎被存儲在cin緩衝區中,所有需要移動的是按「shift」進入Menu_4();
基本上輸入是從getline name請求和它搞砸了我的GetAsyncKeyState()調用。
感謝您的幫助。
哦,我明白了,但爲什麼你有一個異或,那應該是什麼定義?謝謝 – user1143896 2012-03-27 13:16:45
我明白了,我必須得到GetAsyncKeyState(VK_SHIFT)&0x8000,感謝您的幫助。 – user1143896 2012-03-27 13:22:03
'xor 0x1'只是切換LSB,這是不正確的。還有:MS記錄了MSB和LSB,MS並沒有說出有關位之間的任何內容。因此,即使在未來API更改的情況下檢查「if(GetAsyncKeyState(...)&〜0x1)」也容易出錯。檢查'GetAsyncKeyState(...)&0x8000'是要走的路。 – 2012-03-27 16:00:31