繁体   English   中英

如何检测箭头键

[英]how to detect arrow keys

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

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

可能是什么问题?

谢谢

只是为了回答它为什么不起作用:您试图将用户的输入用作未签名的。 您的角色变量已签名,因此该值与您预期的不同。 无符号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)

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

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

我们kbhit()获取键盘箭头键

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM