gpt4 book ai didi

c++ - 删除按键历史(GetKeyState)C++

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:47:24 25 4
gpt4 key购买 nike

当我使用 GetKeyState 或 GetAsyncKeyState 按下某些键时,我遇到了问题,两者都记录了按下键的历史记录。所以当我有一个 cin>> 这是我按下的键。

if(GetKeyState('1'))
{
//do stuff
while(GetAsyncKeyState('1'));
}

if(GetAsyncKeyState('2'))
{
//do other stuff

while(GetAsyncKeyState('2'));
}

if(GetAsyncKeyState('3'))
{

cout<<"Did you press 1? (y/n)"<<endl;
cin>>answ;
if(answ=='y')
{
//do stuff
}


while(GetAsyncKeyState('3'));
}

这是我所拥有的:

Did you press 1?(y/n)

11223_

如何删除按键的历史记录?

最佳答案

其实我之前也遇到过这个问题。首先,您不应该在控制台中使用混合输入(例如“stdio.h”和“conio.h”以及“iostream”和“windows”)。在您的情况下,我会选择 Windows 控制台(MSDN:http://msdn.microsoft.com/en-us/library/windows/desktop/ms682073(v=vs.85).aspx)但正如您所想,我也很懒惰,为此我做了一个解决方法,代码如下:

void ClearConsoleInputBuffer()
{
// If you happen to have any trouble clearing already cleared buffer, uncomment the section below.
/* keybd_event('S', 0, 0, 0);
keybd_event('S', 0,KEYEVENTF_KEYUP, 0);
keybd_event(VK_BACK, 0, 0, 0);
keybd_event(VK_BACK, 0,KEYEVENTF_KEYUP, 0); */
PINPUT_RECORD ClearingVar1 = new INPUT_RECORD[256];
DWORD ClearingVar2;
ReadConsoleInput(GetStdHandle(STD_INPUT_HANDLE),ClearingVar1,256,&ClearingVar2);
delete[] ClearingVar1;
}

现在,它的作用是什么?当您在控制台中键入字符时,它们都存储在控制台缓冲区中。当您编写 cin >> variable; 时,您实际上不是直接从用户那里获取字符,而是从缓冲区中获取字符。让我举个例子:

#include "windows.h"
#include "iostream"

using namespace std;

int main()
{
cout << "write something";
Sleep(10000);
int input;
cin >> input;
}

您会注意到,当您键入字符时,即使没有调用 cin,您的按键操作也会被存储。

现在想象一下,当您按下按键而不使用 `cin' 处理它们时会发生什么。他们将留在缓冲区。你应该避免这种情况。但是您可以使用我上面提到的代码在开始之前清除控制台缓冲区(下面的示例):

#include "windows.h"
#include "iostream"

using namespace std;

void ClearConsoleInputBuffer()
{
PINPUT_RECORD ClearingVar1 = new INPUT_RECORD[256];
DWORD ClearingVar2;
ReadConsoleInput(GetStdHandle(STD_INPUT_HANDLE),ClearingVar1,256,&ClearingVar2);
delete[] ClearingVar1;
}

int main()
{
cout << "write something";
Sleep(3000);

ClearConsoleInputBuffer();

int a;
cin >> a;
}

关于c++ - 删除按键历史(GetKeyState)C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20222277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com