C和指针 第4章 语句 4.5 while语句

本文详细介绍了C语言中的while循环结构,包括其语法、执行过程以及break和continue语句的用法。while循环在测试条件为真时执行循环体,break语句用于立即退出循环,而continue语句则跳过当前循环的剩余部分并进入下一轮循环。文中还通过示例展示了如何在循环中有效利用这两个语句,并讨论了它们在嵌套循环中的行为。此外,还提到了空语句在while循环中的应用情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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' )
        ;
    清楚地显示循环体是空的,不至于使人误以为程序接下来的一条语句才是循环体。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_40186813

你的能量无可限量。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值