【问题标题】:std::cin and std::getline() are overtaking inputs from GetAsyncKeyState()std::cin 和 std::getline() 正在超过来自 GetAsyncKeyState() 的输入
【发布时间】:2021-08-17 03:27:29
【问题描述】:

我对@9​​87654321@ 和std::getline()/std::cin 有疑问。

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

没有解决方案有效,例如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 总是以我之前给出的字符开头。如何删除它?

【问题讨论】:

  • GetAsyncKeyState 不会从任何流中读取任何字符。它检查当前是否按下了键盘上的物理键,仅此而已。这些键在按下时仍然执行它们通常的操作,例如将字符输入到标准输入流中。
  • 这些字符将位于标准输入缓冲区中的位置,直到您将它们读出为止。
  • 但是如何删除字符?

标签: c++ getline


【解决方案1】:

我用不同的输入法解决了。

将其写入我使用的 bool 数组

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

}

来自 conio.h

【讨论】:

    猜你喜欢
    • 2020-03-14
    • 2011-10-12
    • 2016-05-18
    • 2020-10-20
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 2012-04-01
    • 2015-11-17
    相关资源
    最近更新 更多