在 C++ 中检测按键时遇到问题

Having problems detecting keypress in c++

我正在尝试用 C++ 制作一个简单的游戏,为此我必须检测按键(特别是对上、下、左和右感兴趣)。为此,我做了以下工作

#include <iostream>
#include <conio.h>
using string = std::string;

const int K_UP = 72;
const int K_DOWN = 80;
const int K_LEFT = 75;
const int K_RIGHT = 77;

string get_pressed()
{
    if (K_UP == _getch());
    {
        return "UP";
    }
    if (K_DOWN == _getch());
    {
        return "DOWN";
    }
    if (K_RIGHT == _getch());
    {
        return "RIGTH";
    }
    return "LEFT";

}

int main()
{
    cout << "MOVING" << get_pressed() << endl;
}

但是,无论我按什么,输出都是"MOVING UP"。另外,当我在 "how to detect keypresses" 上阅读时,我读到 72 是 windows 给上键的数字,但是当我尝试打印 _getch() 然后按向上键,它给我 244 并且它对右、左和下也是如此。我对这里发生的事情感到困惑,我们将不胜感激。谢谢

您(可能)将键码与 ascii 码混淆了。 c/c++ 方法基本上只支持键的 ascii 代码,而您正在阅读的文档是针对原始键代码的。

例如,有一些 API 可以读取 Windows 上的原始键码,您可能无论如何都需要求助于它们,否则您可能会发现您遇到了缓冲 io,其中键未被读取直到按下换行符。

在 unix 或终端仿真器中,箭头和编辑键将生成(可能)一个转义序列,一系列以代码 31 开头的 ascii 代码,用于转义。 termcap 库应该可以帮助您解码这些。