如何检测箭头键

时间:2012-12-21 12:53:36

标签: c++ console-application visual-c++-2010 conio

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

我正在使用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

可能是什么问题?

由于

3 个答案:

答案 0 :(得分:1)

只是为了回答它为什么不起作用:您试图将用户的输入用作未签名的。您的角色变量已签名,因此该值与您预期的不同。无符号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()从缓冲区中获取下一个char。现在你遇到的问题是你有224(0xE0)在技术上是正确的。但是二进制显然-32和224看起来一样。

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

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

答案 1 :(得分:1)

您可以使用curses.h库。阅读他们的指南,从那里应该很容易。 使用getch()输入输入(将输入存储到int而不是char)后,您可以使用定义的keycodes验证它是否是其中一个箭头键。只需确保您之前使用keypad(stdscr, TRUE),程序才能识别箭头键。

答案 2 :(得分:0)

使用kbhit()获取键盘箭头键