jianhong_wu 发表于 2014-10-29 14:20:02

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]
查看完整版本: C语言中if ,else if,else if的三选一组合语句的执行顺序是怎么样的?已解答。