C++中从键盘方向键的读取问题!~求高手指点!
#include<iostream.h>#include<bios.h>#include<ctype.h>constRight=0x27;constLeft=0x25;v...
#include<iostream.h>
#include<bios.h>
#include<ctype.h>
const Right=0x27;
const Left=0x25 ;
void main(){
int key,modifiers;
while (bioskey(1)==0);
modifiers=bioskey(2);
if(modifiers){
switch(modifiers){
case Right: cout<<endl<<"Right!"<<endl;break;
case Left: cout<<endl<<"Left!"<<endl; break;
}
}
} 展开
#include<bios.h>
#include<ctype.h>
const Right=0x27;
const Left=0x25 ;
void main(){
int key,modifiers;
while (bioskey(1)==0);
modifiers=bioskey(2);
if(modifiers){
switch(modifiers){
case Right: cout<<endl<<"Right!"<<endl;break;
case Left: cout<<endl<<"Left!"<<endl; break;
}
}
} 展开
2个回答
展开全部
(1) bios.h是TC环境下的东西,在VC等其他环境下没法使用。
(2)若是TC环境,modifiers=bioskey(2);
修改为modifiers=bioskey(0);
函数原型:int bioskey (int cmd) 说明:bioskey()的函数原型在bios.h中 bioskey()完成直接键盘操作,cmd的值决定执行什么操作。 cmd = 0: 当cmd是0,bioskey()返回下一个在键盘键入的值(它将等待到按下一个键)。它返回一个16位的二进制数,包括两个不同的值。当按下一个普通键时,它的低8位数存放该字符的ASCII码,高8位存放该键的扫描码;对于特殊键(如方向键、F1~F12等等),低8位为0,高8位字节存放该键的扫描码。
(2)若是TC环境,modifiers=bioskey(2);
修改为modifiers=bioskey(0);
函数原型:int bioskey (int cmd) 说明:bioskey()的函数原型在bios.h中 bioskey()完成直接键盘操作,cmd的值决定执行什么操作。 cmd = 0: 当cmd是0,bioskey()返回下一个在键盘键入的值(它将等待到按下一个键)。它返回一个16位的二进制数,包括两个不同的值。当按下一个普通键时,它的低8位数存放该字符的ASCII码,高8位存放该键的扫描码;对于特殊键(如方向键、F1~F12等等),低8位为0,高8位字节存放该键的扫描码。
更多追问追答
追问
我用的是TC。我发现,如果改成两个if语句判断左右键,则会先后输出两个结果,我按左,它显示左右,我按右,他显示右左。现在的switch语句竟然什么也不显示了……modifiers可以和Right进行等于判断么,应该如何判断?
追答
改为下面试试
void main(){
int key,modifiers;
while (bioskey(1)==0);
key=bioskey(0);
if(key == 0x27){
cout<<endl<<"Right!"<<endl;
}
else if(key == 0x25){
cout<<endl<<"Left!"<<endl;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你想错了,方向键不在ascii里,这个应该是用键盘扫描码,right应该是0x4d00,left是0x4b00;你去网上下载一份键盘扫描码表看一看。百度百科里就有。
更多追问追答
追问
扫描码看到了,是不是上面的modifiers储存的就是方向键的扫描码?既然如此,可不可以用上面写的switch语句进行多分支判断么?
追答
不是的bioskey(2);返回的是上档键状态,你去http://www.baidu.com/baidu?tn=monline_5_dg&ie=utf-8&wd=bioskey看看。去网上找份源代码,看看一般的键盘操作函数的流程。
参考资料: http://baike.baidu.com/view/1969796.htm
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询