在C语言中,while 是一种基本的循环,do while 是它的一种变体,有时候两者可以互换。
while 语句适用于“当条件成立时重复操作”的循环控制结构,因而常被称作当型循环。其一般格式如下:
while (condition) { 循环体; //一条或多条 C 语句 }
condition 就是一个关系判断表达式,它与 if 语句中的 condition 一样,其外面的括号是必需的。循环体是 while 语句的主体部分,是需要重复操作的一条或多条 C 语句,它包含多条语句时,其外侧必须加上花括号{ }。
如果关系判断表达式 condition 的结果为“真”,就执行循环体里面的语句,之后再次判断 condition,如果结果还是为“真”,则再次执行循环体里面的语句,如此重复操作,直到 condition 的结果为“假”时,不再执行循环体里面的语句,而退出 while 语句,继续执行后续语句。
在循环体内必须存在一条语句,执行后能够改变 condition 中的变量的值,从而使 condition 的判断结果发生变化,出现结果为“假”的情况,终止循环。否则这个循环将会一直重复执行下去,出现“死循环”。
while 语句和 if 语句都是根据关系判断表达式 condition 的判断结果来决定是否执行其主体部分的语句块。两者的不同之处在于,当 condition 为“真”时,if 语句中的主体部分语句块只执行一次,而 while 语句中的循环体会重复执行多次,直到 condition 为“假”才终止循环(见图 1)。
另外,while 语句和 if 语句一样,不要在其主体部分外的花括号{ }后面加上分号。分号只出现在 while 语句循环体内的语句后面。
while 循环示例:
do-while 语句适用于“重复操作直到条件不成立为止”的循环控制结构,因而常被称作直到型循环。其一般格式如下:
do { 循环体; //一条或多条 C 语句 } while (condition);
do-while 循环语句是在执行循环体之后才检查 condition 表达式的值,所以 do-while 语句的循环体至少执行一次。
跟 while 语句一样,要确保 do-while 语句的循环体部分修改了 condition 中的某个变量,从而改变 condition 的判断结果,能够结束循环,否则循环将永远重复下去,成为“死循环”。
do while 循环示例:
do-while 语句和 while 语句都擅长于解决循环次数未知的重复操作,但两者在实际应用中还是有区别的:
图 2 展示了 do-while 语句和 while 语句在流程图上的区别,以及在程序中相互转换的示例。
while 和 do while 循环综合示例: