4.3 do-while语句
do-while 语句用来实现“直到型”循环,特点是先执行循环体,然后判断循环条件是否
成立。其一般形式如下:
do
循环体语句
while(表达式)
对同一个问题,既可以用while 语句处理,也可以用do-while 语句处理。但是这两个语
句是有区别的,下面我们用do-while 语句改写例2。
例 4-3:用do-while 语句实现如下功能:K1 按下,流水灯工作,K2 松开,灯全熄灭。
#include "reg51.h"
#include"intrins.h" //该文件包含有_crol_(…)函数的说明
void mDelay(unsigned int DelayTime)
{ unsigned int j=0;
for(;DelayTime>0;DelayTime--)
{ for(j=0;j<125;j++)
{;}
}
}
void main()
{ unsigned char OutData=0xfe;
while(1)
{ P3|=0x3c;
do
{ P1=OutData;
OutData=_crol_(OutData,1); //循环左移
mDelay(1000); /*延时1000 毫秒*/
} while((P3|0xfb)!=0xff)
P1=0xff;
}
}
程序分析:这个程序除主程序中将while 用do-while 替代外,没有其他的变化,初步设
想,如果while()括号中的表达式为“真”即K1 键被按下,应该执行程序体,否则不执
行,效果与例4-2 相同。但是事实上,实际做这个练习就会发现,不论K1 是否被按下,流
水灯都在工作。为何会有这么样的结果呢?
单步运行程序可以发现,如果K1 键被按下,的确是在执行循环体内的程序,与设想相
同。而当K1 没有被按下时,按设想,循环体内的程序不应该被执行,但事实上,do 后面的
语句至少要被执行一次才去判断条件是否成立,所以程序依然会去执行do 后的循环体部分,
只是在判断条件不成立(K1 没有被按下)后,转去执行P1=0xff;然后又继续循环,而下一
次循环中又会先执行一次循环体部分,因此,K1 是否被按下的区别仅在于“P1=0xff;”这一
程序行是否会被执行到。
成立。其一般形式如下:
do
循环体语句
while(表达式)
对同一个问题,既可以用while 语句处理,也可以用do-while 语句处理。但是这两个语
句是有区别的,下面我们用do-while 语句改写例2。
例 4-3:用do-while 语句实现如下功能:K1 按下,流水灯工作,K2 松开,灯全熄灭。
#include "reg51.h"
#include"intrins.h" //该文件包含有_crol_(…)函数的说明
void mDelay(unsigned int DelayTime)
{ unsigned int j=0;
for(;DelayTime>0;DelayTime--)
{ for(j=0;j<125;j++)
{;}
}
}
void main()
{ unsigned char OutData=0xfe;
while(1)
{ P3|=0x3c;
do
{ P1=OutData;
OutData=_crol_(OutData,1); //循环左移
mDelay(1000); /*延时1000 毫秒*/
} while((P3|0xfb)!=0xff)
P1=0xff;
}
}
程序分析:这个程序除主程序中将while 用do-while 替代外,没有其他的变化,初步设
想,如果while()括号中的表达式为“真”即K1 键被按下,应该执行程序体,否则不执
行,效果与例4-2 相同。但是事实上,实际做这个练习就会发现,不论K1 是否被按下,流
水灯都在工作。为何会有这么样的结果呢?
单步运行程序可以发现,如果K1 键被按下,的确是在执行循环体内的程序,与设想相
同。而当K1 没有被按下时,按设想,循环体内的程序不应该被执行,但事实上,do 后面的
语句至少要被执行一次才去判断条件是否成立,所以程序依然会去执行do 后的循环体部分,
只是在判断条件不成立(K1 没有被按下)后,转去执行P1=0xff;然后又继续循环,而下一
次循环中又会先执行一次循环体部分,因此,K1 是否被按下的区别仅在于“P1=0xff;”这一
程序行是否会被执行到。