std::cin 和 std::getline() 正在超越 GetAsyncKeyState() 的输入

问题描述

我在使用 GetAsyncKeyState()std::getline()/std::cin 时遇到问题。

我的程序使用 GetAsyncKeyState() 检查按下的键。这工作正常。但是每当我在此之后 cingetline 一个变量时,它仍然具有我之前按下的字符。

没有解决方案,例如 cin.ignore()cin.flush() :(

bool keypressed[5]; 
          
int key_ascii_nums[5]= {65,69,68,67,76};  
for (int i = 0; i < 5; i++){
    if(GetAsyncKeyState(key_ascii_nums[i]) & 0x8000)
        keypressed[i] = true;
    else 
        keypressed[i] = false;
}

string str;
getline(cin,str);

str 总是以我之前给出的字符开头。我怎样才能删除它?

解决方法

我用不同的输入法解决了这个问题。

已将其写入我使用的 bool 数组

switch (toupper(_getch()))
{
    case 'L': 
      // do stuff
      break;
    default:
      break;

}

来自 conio.h