我创建了一个用于检测键盘上下按键的应用程序 但按下这些键后不会打印任何内容。
我正在使用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
可能是什么问题?
由于
答案 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()获取键盘箭头键