gpt4 book ai didi

c++ - getch() 从一个方向键按下读取两个字符

转载 作者:行者123 更新时间:2023-12-02 10:27:15 27 4
gpt4 key购买 nike

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

它非常简单。程序从一个循环开始,其中无休止地输出变量“total”的值,并在按下左/右按钮后“total”递减/递增 1。

当我使用 system("pause"); 时,它运行良好且完美。 sleep (毫秒); cin.get();(但这个假设每次都按回车,所以它不是正确的),每次按下按钮后都会在屏幕上输出正确的值。但如果使用 getch();它以某种方式似乎每/两个循环周期只工作一次。

所以我得到的结果是这样的:我正在按下按钮 - 当前循环工作正常,但下一个循环工作就像没有 getch() 一样,在没有我的命令的情况下增加和输出一次......

我已经坐下来思考了几个小时,试图在谷歌和这里找到任何答案,但什么也没有......

P.S.不使用 getch() 或其他东西来停止循环直到下一次按下 - 它不会通过单次按下增加 +1 (根据我的需要),而是数百次(平均按下键将执行 150-300 循环哈哈)。

最佳答案

来自 MS documentation

Remarks

The _getch and_getwch functions read a single character from theconsole without echoing the character. None of these functions can beused to read CTRL+C. When reading a function key or an arrow key, eachfunction must be called twice; the first call returns 0 or 0xE0, andthe second call returns the actual key code.


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

关于c++ - getch() 从一个方向键按下读取两个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63853878/

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