关于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值的改变成为即时的,这是为什么? 展开
{
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值的改变成为即时的,这是为什么? 展开
展开全部
if(kbhit()!=0) 当程序开始运行时,还没来得及按键,kbhit() 已经执行了,返回值是 没有按。
没有按,返回0,就不会进入 if(){...}
去掉你的if 语句,改成:
-------------------------
while(kbhit()!=0){}; //等待按键
a=getch(); /读取按了的键
switch(a){};
-----------
如果一个键会产生2个值的,你要读2次,例如:
a=getch();
if (a == 0xe0) {a = getch();}
没有按,返回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() 函数。
与其那样,不如按我说的方法,简单,简便,简捷。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |