0

我创建了一个应用程序来检测键盘上的向上和向下键,但按下这些键后不会打印任何内容。

我正在使用 Visual C++ 2010

    #include <iostream>
    #include <conio.h>
    using namespace std;

void main()
    {
        char x;

        while(1)
        {

            x = getch();
            if(x==0 || x==224)
            {
                x=getch();
                if(x==80)
                {
                    cout << "down"<<endl;
                }


                else if(x==72)
                {
                    cout << "up"<<endl;
                }
            }//if x==0 || x=224
        }//while1
    }//main

可能是什么问题?

谢谢

4

3 回答 3

2

只是为了回答它为什么不起作用:您正在尝试将用户的输入用作未签名的。您的字符变量已签名,因此该值与您的预期不同。无符号的 224 是有符号的 -32。

就您的循环而言,我建议将其更改为此。

void main()
    {
        char x;

        while(true)
        {
            while(!kbhit()){}
            x = getch();

            if(x==0 || x==-32)
            {
                x=getch();
                if(x==80)
                {
                    cout << "down"<<endl;
                }


                else if(x==72)
                {
                    cout << "up"<<endl;
                }
            }//if x==0 || x=224
        }//while1
    }//main

该程序仍将永远循环。然后我添加的下一个循环将在没有按键被按下(缓冲)时继续循环。然后 getch() 从缓冲区中获取下一个字符。现在您遇到的问题是您有 224 (0xE0),这在技术上是正确的。然而在二进制中,显然 -32 和 224 看起来是一样的。

起初我遇到了一些相同的问题,我无法弄清楚为什么我的代码没有命中正确的代码块,这是因为第一个字符实际上是 -32 (0xE0)

希望这会有所帮助,尽管这是一个非常古老的问题。

于 2013-10-23T02:28:26.093 回答
1

You can use the curses.h library. Read their guide and it should be very easy from there. After you take input using getch() (store the input into an int, not a char), you can verify if it's one of the arrow keys using the defined keycodes. Just make sure you used keypad(stdscr, TRUE) before for the program to be able to recognize the arrow keys.

于 2017-04-20T10:36:20.540 回答
0

我们 kbhit() 获取键盘方向键

于 2012-12-21T12:58:06.560 回答