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;
}
}
}
展开
 我来答
松甜恬0Je4ba
2011-06-28 · TA获得超过2.6万个赞
知道大有可为答主
回答量:7475
采纳率:100%
帮助的人:3444万
展开全部
(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位字节存放该键的扫描码。
更多追问追答
追问
我用的是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;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bjrxyz
2011-06-28 · TA获得超过340个赞
知道小有建树答主
回答量:157
采纳率:0%
帮助的人:116万
展开全部
你想错了,方向键不在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

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式