【发布时间】:2021-08-17 03:27:29
【问题描述】:
我对@987654321@ 和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不会从任何流中读取任何字符。它检查当前是否按下了键盘上的物理键,仅此而已。这些键在按下时仍然执行它们通常的操作,例如将字符输入到标准输入流中。 -
这些字符将位于标准输入缓冲区中的位置,直到您将它们读出为止。
-
但是如何删除字符?