独闷闷网

标题: C语言中if ,else if,else if的三选一组合语句的执行顺序是怎么样的?已解答。 [打印本页]

作者: jianhong_wu    时间: 2014-10-29 14:20
标题: C语言中if ,else if,else if的三选一组合语句的执行顺序是怎么样的?已解答。
曹健-江苏:
鸿哥,第33例.
  1. //在本程序中,每次长按复位按键必然触发一次短按复位按键
  2.     if(key_sr1==1)//IO是高电平,说明按键没有被按下,这时要及时清零一些标志位
  3.     {
  4.         ui_key_lock1=0; //按键自锁标志清零
  5.         ui_key_delay1=0;//按键去抖动延时计数器清零,此行非常巧妙,是我实战中摸索出来的。      
  6.     }
  7.     else if(ui_key_lock1==0)//有按键按下,且是第一次被按下
  8.     {
  9.         ui_key_delay1++; //累加定时中断次数
  10.         if(ui_key_delay1>20)
  11.             {
  12.             ui_key_delay1=0;
  13.             ui_key_lock1=1;  //自锁按键置位,避免一直触发
  14.             uc_key_num=2;    //触发2号键,短复位按键
  15.             }
  16.     }
  17.     else if(ui_key_delay1<200)   //长按复位按键
  18.     {
  19.         ui_key_delay1++;
  20.         if(ui_key_delay1==200)
  21.             {
  22.             uc_key_num=17;    //触发17号长按复位键
  23.             }
  24.     }
复制代码

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这个条件来锁存的。

鸿哥--深圳:
对。三选一。







欢迎光临 独闷闷网 (http://dumenmen.com/) Powered by Discuz! X3.2