getch()从一个箭头键读取两个字符按

时间:2018-03-31 16:55:17

标签: c++

今天我正在测试按键在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 )。

1 个答案:

答案 0 :(得分:4)

来自MS documentation

  

<强>说明

     

_getch和_getwch函数从中读取单个字符   控制台没有回应角色。这些功能都不是   用于读取CTRL + C.每次读取功能键或箭头键时   函数必须被调用两次;第一个调用返回0或0xE0,和   第二个调用返回实际的密钥代码。

按箭头键时,输入为2个字符