关于kbhit()函数的问题

voidbutton(){inta=0;if(kbhit()!=0){这一句循环是后来加的-->while(kbhit()!=0)a=getch();switch(a){... void button()
{
int a=0;
if(kbhit()!=0)
{
这一句循环是后来加的-->while(kbhit()!=0)
a=getch();
switch(a)
{
case 72:key=0;break;//上
case 80:key=1;break;//下
case 75:key=2;break;//左
case 77:key=3;break;//右
}
}
}
楼主使用以上为加whlie循环的button时,输入按键后会有一个循环的延迟KEY值才改变(主函数中有一个循环),但是加了whlie循环后,KEY值的改变就变成即时的了,这是为什么?
if语句一直都存在,只有while语句是后来加的,却让KEY值的改变成为即时的,这是为什么?
展开
 我来答
金色潜鸟
推荐于2016-08-25 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5543万
展开全部
if(kbhit()!=0) 当程序开始运行时,还没来得及按键,kbhit() 已经执行了,返回值是 没有按。
没有按,返回0,就不会进入 if(){...}
去掉你的if 语句,改成:
-------------------------
while(kbhit()!=0){}; //等待按键
a=getch(); /读取按了的键
switch(a){};
-----------
如果一个键会产生2个值的,你要读2次,例如:
a=getch();
if (a == 0xe0) {a = getch();}
追问
虽然看懂了你的更改,可是不明白这和我的问题有什么关系,可以再解释一下吗?
追答
你的问题是
if(kbhit()!=0)
{
这一句循环是后来加的-->while(kbhit()!=0) a=getch();
....
}
如果没有在外面加一层循环,你跟本进不了条件语句内部,也就不可能执行“后来加的”。
除非 反复循环调 你的 button() 函数。
与其那样,不如按我说的方法,简单,简便,简捷。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式