4.5 while子句
C语言唯一存在差别的地方就是它的expression部分,这和if语句类似。while语句的语法:
while( expression )
statement
循环的测试在循环体开始执行之前进行,所以如果测试的结果一开始就是假,循环体就根本不会执行。同样,当循环体需要多余语句来完成任务时,可以使用代码块来实现。
4.5.1 break和continue语句
在while循环中可以使用break语句,用于永久终止循环。在执行完break语句之后,执行流下一条执行的语句就是循环正常结束后应该执行的那条语句。
在while循环中可以使用continue语句,它用于永久终止当前的那次循环。在执行完continue语句之后,执行流接下来就是重新测试表达式的值,决定是否继续执行循环。
这两条语句的任何一条如果出现于嵌套的循环内部,它只对最内层的循环起作用,无法使用break或continue语句影响外层循环的执行。
4.5.2 while语句的执行过程
菱形表示判断、方框表示需要执行的动作,箭头表示它们之间的控制流
while语句的操作过程。它的执行从顶部开始,就是计算表达式expr值。如果它的值是0,循环就终止;否则就执行循环体,然后控制流回到顶部,重新开始下一个循环。例如,下面的循环从标准输入复制字符到标准输出,直至找到文件尾结束标志。
while( (ch = getchar()) != EOF ){
putchar(ch);
}
如果循环体内执行了continue语句,循环体内的剩余部分便不再执行,而是立即开始下一轮循环。在循环体只有遇到某些值才会执行的情况下,continue语句相当有用。
while( (ch = getchar()) != EOF )
{
if( ch < '0' || ch > '9' )
{
continue;
}
/*process only the digits*/
}
另一种方法是把测试转移到if语句中,让它来控制整个循环的流程。这两种方法的区别仅在于风格,在执行效率上并无差别。
如果循环体内执行了break语句,循环就将永久性退出。例如,我们需要处理一列以一个负值作为结束标志的值:
while( scanf("%f", &value) == 1 )
{
if ( value < 0 )
{
break;
}
/*process the nonnegative values*/
}
另一种方式是把这个测试加入到while表达式中,如下所示:
while( scanf("%f", &value) == 1 && value >= 0 ){
然而,如果在值能够测试之前必须执行一些计算,使用这种风格就显得比较困难。
提示:
偶尔,while语句在表达式中就可以完成整个语句的任务,于是循环体就无事可做。在这种情况下,循环体就用空语句来表示。单独用一行来表示一条空语句是比较好的做法,如下面的循环所示,它将丢弃当前输入行的剩余字符。
while ( (ch = getchar()) != EOF && ch != '\n' )
;
清楚地显示循环体是空的,不至于使人误以为程序接下来的一条语句才是循环体。
C和指针 第4章 语句 4.5 while语句
于 2022-06-11 07:59:18 首次发布