今天我正在测试按键在C ++中是如何工作的,并为它做了简单的循环,并发现getch()由于某种原因复制了自己,或者发现了正在发生的事情,只看一下:
#include <iostream>
#include <windows.h>
#include <conio.h>
#define VK_H 0x48
using namespace std;
int main()
{
int n=1;
int total=0;
bool theEnd=true;
while(theEnd)
{
cout<<total<<endl;
getch();
if(GetAsyncKeyState(VK_LEFT))
{
total -=n;
}else if(GetAsyncKeyState(VK_RIGHT))
{
total +=n;
}else if(GetAsyncKeyState(VK_LSHIFT) && GetAsyncKeyState(VK_F1))
{
total = 0;
} else if(GetAsyncKeyState(VK_ESCAPE))
{
break;
}
}
cout<<total<<endl;
}
它非常简单。程序以循环开始,其中无限输出变量&#34; total&#34;的值,然后按左/右按钮&#34; total&#34;递减/递增1.
当我使用系统时,它的工作正常且完美(&#34;暂停&#34;);睡眠(毫秒); cin.get(); (但是这个假设每次按下输入,所以它不合适),每次按下按钮后屏幕上的所有输出正确值。但是如果是的getch();它在某种程度上看起来像每循环一次只有一次循环。
所以我得到的结果是这样的:我按下按钮 - 当前循环工作正常,但是下一个工作就像没有getch()一样,在没有我的命令的情况下再增加并输出一次。 ..
我选址和思考几个小时,尝试在谷歌和这里找到任何答案,但没有...
PS没有使用getch()或其他东西用于停止循环直到下一次按下 - 它将通过单击(如我需要)添加不总+1,但数百(平均按键将执行150-300循环lol )。
答案 0 :(得分:4)
<强>说明强>
_getch和_getwch函数从中读取单个字符 控制台没有回应角色。这些功能都不是 用于读取CTRL + C.每次读取功能键或箭头键时 函数必须被调用两次;第一个调用返回0或0xE0,和 第二个调用返回实际的密钥代码。
按箭头键时,输入为2个字符