C语言执行了if语句为什么还能继续执行else if? 这个是按键控制LED灯,运行后无论我按按键的顺序是什么,对应的灯都会依次亮
while(1)
{
if(P30==0)P00=0;
else if(P31==0)P01=0;
else if(P32==0)P02=0;
else if(P33==0)P03=0;
}
}
因为你有一个while循环,里面的代码进了四次,每次进入不同的if分支。
如果只要亮一个等,删掉外层的while就可以了
这四个每次只能进一个是没错的,但是P00-P03的数值,在这之前或者之后是否有变化?
你这代码就放这么一点,分析也分析不了啥,应该是你其他的地方写错了
其实就是按键问题,按键只有一直按下时才会置0,手一旦松开就置1了。所以程序一直循环时,每个灯都可以被点亮。
不知道你这个问题是否已经解决, 如果还没有解决的话:问题的原因是if语句和else if语句的执行是互斥的,只有当if语句的条件不满足时,才会执行else if语句。在给定的代码中,只有一个条件是true,那么对应的语句块将会被执行。下面是代码的执行流程:
总结起来,只有满足if语句的条件,对应的语句块才会执行,如果条件不满足,则转到下一个else if语句继续判断。在给定的代码中,只有一个条件满足,所以只会执行其中一个语句块。其他的else if语句则会被跳过。
注意,如果有多个条件同时满足,只有第一个满足条件的语句块会被执行。如果希望同时执行多个语句块,可以使用独立的if语句,而不是通过else if连接。
在C语言中,条件语句(如if语句和else if语句)的执行是基于条件表达式的结果。当条件表达式为真(非0)时,对应的语句块会被执行,否则会跳过。
当执行一个if语句时,如果条件为真,则对应的语句块中的代码会执行,并且程序会继续执行之后的代码。如果条件为假,则该if语句的代码块会被跳过,而程序会继续执行下一个语句。
当使用else if语句时,它会在前面的if语句条件为假时进行判断。如果前面的if语句条件为真,则在执行对应的语句块后,整个条件语句会被跳过,程序会继续执行后续的代码。如果前面的if语句条件为假,则会继续判断else if语句的条件,依此类推。
根据您的描述,无论按键的顺序如何,对应的LED灯都会依次亮,这说明每个if或else if语句的条件都满足,因此所有的语句块都会被执行。如果您想要只执行匹配的第一个条件对应的语句块,可以将每个条件分开成独立的if语句,即每个条件都单独判断,而不是使用else if。这样只有满足第一个条件的语句块会被执行,后续的条件就不会再判断了。