所谓循环(looping),就是重复执行一系列语句。C 提供了三种循环结构,分别为 while, for 和
do while 。
一、while 循环
while 循环的使用方法为:
while ( condition )
一条语句
如果 condition 为真(true),则循环执行“一条语句”;如果 condition 为假(false),则不执行“一条语句”,并退出循环。C 语言中,0 为假,非零为真。也就是说,如果 condition 的值为 0,则 condition 为假;否则,condition 为真。
while 循环也可以这么用:
while ( condition )
{
一系列语句
}
如果 condition 为真(true),则循环执行大括号中的一系列语句;反之,不执行大括号中的一系列语句,并退出循环。
这两种用法的区别是,前者只能循环执行一条语句,而后者却能循环执行大括号中的一系列语句。例如:
int main(void)
{
int i = 0, j = 0, k = 0;
while ( i < 3 ) /* 当 i 小于 3 为真 */
++i; /* 循环执行 ++i; */
++j; /* 这个 while 循环不作用于 ++j; */
/* 以上语句执行完后,i 的值为 3,j 的值为 1 */
while ( k < i ) /* 当 k 小于 i 为真 */
{
++j; /* 循环执行 ++j; 和 ++k; */
++k;
} /* 这个 while 循环作用于 ++j; 和 ++k; */
/* 以上语句执行完后,j 的值为 4,k 的值为 3 */
return 0;
}
< 是小于运算符,也就是说,i < 3 检测 i 是否小于 3。如果 i 小于 3,则 i < 3 为真,否则为假。当 i < 3 为真时,循环执行 ++i; ;当 i 自增到 3 时,i < 3 为假,循环中止,转而执行 ++j; 。当 k < i 为真时,循环执行 ++j; 和 ++k; ;当 k 自增到 3 时,k < i 为假(因为 i 的值为 3),循环中止,转而执行 return 0; 。下图简单描述了 while 循环的结构:

二、复合语句(块)
复合语句(compound statement)由大括号及大括号内的一系列语句组成。如:
{
++j;
++k;
}
这就是一个复合语句。复合语句也称之为块(block)。前面所说的 while 循环的第二种用法,用的就是复合语句。所以,while 循环的用法可以总结为:
while ( condition )
一条语句/复合语句
其中,condition 可以是任何表达式。如果 condition 为真,则执行一次“一条语句/复合语句”,然后再次检测 condition 的真假性,根据 condition 的真假性决定是否继续执行“一条语句/复合语句”。当 condition 为假时,则不执行“一条语句/复合语句”,并退出循环,转而执行后续的语句。
注意,如果 condition 一开始就为假,则“一条语句/复合语句”一次也不会被执行。如:
int i = 5;
while ( i < 4 )
i++;
由于 i 一开始就大于 4,所以 i < 4 一开始就为假,i++; 一次也不会被执行。此外,
while ( ++i < 10 )
;
是正确的,因为 ; 是一条完全合法的语句。
参考资料:C Primer 5th Edition
The C Programming Language 2nd Edition
C99 标准
本文版权归 蚂蚁的 C/C++ 标准编程 以及 作者 antigloss 共同所有,转载请注明原作者和出处。谢谢。