C语言中if ,else if,else if的三选一组合语句的执行顺序是怎么样的?已解答。
曹健-江苏:鸿哥,第33例.
//在本程序中,每次长按复位按键必然触发一次短按复位按键
if(key_sr1==1)//IO是高电平,说明按键没有被按下,这时要及时清零一些标志位
{
ui_key_lock1=0; //按键自锁标志清零
ui_key_delay1=0;//按键去抖动延时计数器清零,此行非常巧妙,是我实战中摸索出来的。
}
else if(ui_key_lock1==0)//有按键按下,且是第一次被按下
{
ui_key_delay1++; //累加定时中断次数
if(ui_key_delay1>20)
{
ui_key_delay1=0;
ui_key_lock1=1;//自锁按键置位,避免一直触发
uc_key_num=2; //触发2号键,短复位按键
}
}
else if(ui_key_delay1<200) //长按复位按键
{
ui_key_delay1++;
if(ui_key_delay1==200)
{
uc_key_num=17; //触发17号长按复位键
}
}
if(条件1)
else if(条件2)
else if(条件3)
执行顺序是什么?
为什么上面的程序长按复位按键,短复位按键也会动作?
鸿哥--深圳:
if(条件1)
else if(条件2)
else if(条件3)
三选一。
先是判断条件1,如果条件1不满足才判断条件2,否则就跳过了。
如果条件2不满足,才判断条件3,否则就跳过了。
如果条件1和条件2都不满足,最后才判断条件3.
曹健-江苏:
这句话我没有理解,为什么*每次长按复位按键必然触发一次短按复位按键?如果按照刚才if ,else if ,else if的执行顺序,应该是长按复位按键则只有长复位按键动作。
鸿哥--深圳:
if(条件1)
else if(条件2)
else if(条件3)
不会,因为条件2是短按的,条件3是长按。
你要进入条件3长按,必然是触发了条件2的短按。
ui_key_lock1=1;//自锁按键置位,避免一直触发
这句话被执行到后才会进入条件3。
曹健-江苏:
你的意思是先是条件2执行然后再条件3执行?
鸿哥--深圳:
只要条件2一直满足else if(ui_key_lock1==0),那么就永远都不会进入条件3。
只有进入条件2里面把 ui_key_lock1=1;后,才会进入条件3。
曹健-江苏:
我理解了。两个else if 之间是通过 ui_key_lock1这个条件来锁存的。
鸿哥--深圳:
对。三选一。
页:
[1]