[英]RAWINPUT.Keyboard: How to detect arrow keys when NUMLOCK=ON?
[英]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)
希望这有一些帮助,尽管这是一个非常古老的问题。
我们kbhit()获取键盘箭头键
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.