关于while

来源:百度知道 编辑:UC知道 时间:2024/06/30 02:03:55
象这样一段代码

void Main(void)
{
while(1)
{
while( (pxIcc->gen_status != DRV_END);
Os__light_on();
...................
}
由于第一个while的条件恒成立,乞不是会出现这样的情况,程序反复循环,比如有发声的代码,那么就会响个不停。还有第二个while如果条件成立就点亮背景灯光,也是反复点亮,而后面的代码得不到执行,而此时是需要接受用户输入的。
(我仔细看过这段代码的源程序第一个while条件后没符号且有大括号,而第二个条件后有分号却没有大括号,不知道是怎么回事,这个程序已经编译通过了)。

可能第一个while语句中包含跳出循环的语句,至于分号就不知道怎么回事了。

用个中间变量自加“i++”
判断自加多少次后执行break跳出此次循环执行下面的输入操作。如果需要要求输入控制是否回去执行原来的循环只需要在最外面(第一个while)再加一个死循环,当输入要求执行其他指令时执行下面的指令或者再用个break跳出总循环,如果输入要求回到原来循环时用continue跳出本次总循环执行下次总循环。即可时程序由用户输入控制指令顺序

还有,你第二个while后面有个“;”,表示只执行一条空指令。当循环体只有一句语句时不需要大括号。所以只有第一个while有大括号。程序也会由于一直执行空指令而无法执行下面的程序。

while( (pxIcc->gen_status != DRV_END);
这个循环体是空的,并不会执行到你说的后面的不停点亮的动作,只是判断状态,直到状态符合不符合条件了才跳出。

外面的那个大循环是一直运行的,直到break才退出。写成这样是为不断重复一个开始的动作,是有必要的

显然while( (pxIcc->gen_status != DRV_END); 这一句是用来监视pxIc指向的结构体的gen_status这一状态值的。
我想结构体指针pxIcc应该是全局的,而它的成员gen_status应该在其它地方会发生改变吧,没代码只是猜测,呵呵!
因此程序会在先在while( (pxIcc->gen_status != DRV_END);这反复等待,直到pxIcc->gen_status == DRV_END就执行后面的点亮背景灯光。
至于while(1){...}循环体中一定有跳出循环或终止程序的语句吧。

循环体中:
只有一个语句,可以省略{}
有很多个语句,一定要用{}

while(1)
{
printf("haha\n");
}
可以写成
while(1)
printf("haha\n");/*分行*/
或者