文档章节

C Primer Plus 第7章 C控制语句:分支和跳转 7.6 continue和break

idreamo
 idreamo
发布于 2016/06/19 08:05
字数 1169
阅读 49
收藏 0

7.6.1 continue语句

该语句可以用于三种循环形式

当运行到该语句时,它将导致剩余的迭代部分被忽略,并开始下一次的迭代。

如果continue语句处于嵌套结构中,它仅仅影响它的最里层的结构。

程序清单7.9  skippart.c

/*skippart.c--使用continue跳过部分循环*/
#include <stdio.h>
int main (void)
{
    const float MIN = 0.0f;
    const float MAX = 100.0f;

    float score;
    float total = 0.0f;
    int n = 0;
    float min = MAX;
    float max = MIN;

    printf("Enter the first score (q to quit):");
    while(scanf("%f",&score)==1)
    {
        if(score<MIN || score>MAX)
        {
            printf("%0.1f is an invalid value.Try again:",score);
            continue;
        }
        printf("Accepting %0.1f: \n",score);
        min = (score<min)?score:min;
        max = (score>max)?score:max;
        total += score;
        n++;
        printf("Enter next score (q to quit):");
    }
    if(n>0)
    {
        printf("Average of %d scores is %0.1f.\n",n,total / n);
        printf("Low = %0.1f,high = %0.1f \n",min,max);
    }
    else
        printf("No valid scores were entered.\n");
    return 0;
}

如果程序输入188,那么程序就会说明:188 is an invalid value.然后,continue语句导致程序跳过循环其余用于处理有效输入的部分。开始下一个循环周期,试图读取下一次输入值。

在这种情况下,使用continue的一个好处是可以在主语句中消除一级缩排。增强可读性。

continue的另一个用处是作为占位符。例如,下面的循环读取并丢弃输入,直到一行的末尾(包括行尾字符):

while (getchar()!='\n')

;

当程序已经从一行中读取了一些输入并需要跳到下一行的开始时,使用上面的语句很方便。问题是孤立的分号难以被注意。如果使用continue,代码就更具有可读性,如下所示:

while (getchar()!='\n')

    continue;

当然,如果它不是简化了代码,而是使代码更加复杂了,就不要使用continue.

您已经看到了continue语句导致循环体的剩余部分被跳过。那么在什么地方继续循环呢?

对于while和do while循环,continue语句之后发生的动作是求循环判断表达式的值考虑下面的循环体:

    int count = 0;
    char ch;
    while(count < 10)
    {
        ch = getchar();
        if(ch=='\n')
            continue;
        putchar(ch);
        count++;
    }

它读取10个字符(换行符除外,因为当ch为换行符时会跳过count++;语句)并回显它们,其中不包括换行符。continue被执行时,下一个被求值 的表达式是循环判断条件。

对于for循环,下一个动作是先求更新表达式的值,然后再求循环判断表达式的值。考虑下面的循环体:

for(count = 0;count<10;conut++)

{

        ch = getchar();
        if(ch=='\n')
            continue;
        putchar(ch);

}

在本例中,当continue语句被执行时,首先递增count,然后把count与10相比较。因此,这个循环的动作稍不同于while循环的例子。像前面那样,仅仅显示非换行字符,但这时换行字符也被包括在计数中,因此它读取包括换行字符在内的10个字符。

7.6.2  break语句

循环中的break语句导致程序终止包含它的循环,并进行程序的下一阶段。

如果break位于嵌套循环里,它只影响包含它的最里面的循环。

有时,break被用于在出现其他原因时退出循环。

程序7.10用一个循环计算矩形的面积,如果用户输入一个非数字作为矩形的长度或宽度,那么循环终止。

/*break.c--使用break退出循环*/
#include <stdio.h>
int main(void)
{
    float length,width;

    printf("Enter the length of the rectangle:\n");
    while(scanf("%f",&length)==1)
    {
        printf("Length = %0.2f: \n",length);
        printf("Enter its width: \n");
        if(scanf("%f",&width)!=1)
            break;
        printf("Width = %0.2f: \n",width);
        printf("Area = %0.2f \n",length*width);
        printf("Enter the length of the rectangle: \n");
    }
    printf("Done.\n");
    return 0;

}

也可以这样控制循环:

while(scanf("%f %f",&length,&width)==2)

但是,使用break可以使单独回显每个输入值更加方便。

和continue一样,当break使代码更加复杂时不要使用它。

注意:break语句使程序直接转到紧接着该循环后的第一条语句去执行在for循环中,与continue不同,控制段的更新部分也将被跳过嵌套循环中的break语句只是使程序跳出里层的循环,要跳出外层的循环,则还需要另外一个break.

int p,q;
scanf("%d",&p);
while(p>0)
{
    printf("%d",p);
    scanf("%d",&q);
    while(q>0)
    {
        printf("%d",p*q);
        if(q>100)
            break;    //跳出里层循环
        scanf("%d",&q);
    }
    if(q>100)
        break;        //跳出外层循环
    scanf("%d",&p);
}

 

© 著作权归作者所有

idreamo
粉丝 18
博文 139
码字总数 224743
作品 0
青岛
产品经理
私信 提问
C Primer Plus 第7章 C控制语句:分支和跳转 本章概要

在本章中您将学习到以下内容: *关键字 if / else / switch / continue / break / case / default / goto *运算符 && || ?: *函数: getchar() / putchar() 以及ctype.h系列 *怎样使用if和i...

idreamo
2016/06/12
47
0
《Java从小白到大牛》之第7章 控制语句

《Java从小白到大牛》纸质版已经上架了!!! 程序设计中的控制语句有三种,即顺序、分支和循环语句。Java程序通过控制语句来管理程序流,完成一定的任务。程序流是由若干个语句组成的,语句...

tony关东升
2018/06/25
0
0
C Primer Plus 第11章 11.7 ctype.h字符函数和字符串

第7章“C控制语句 分支和跳转”介绍了ctype.h系列字符相关的函数。这些函数不能被 应用于整个字符串,但是可以被应用于字符串中的个别字符。程序清单11.26定义了一个函数,它把toupper( )函数...

idreamo
2016/08/27
52
0
《Python从小白到大牛》第8章 控制语句

程序设计中的控制语句有三种,即顺序、分支和循环语句。Python程序通过控制语句来管理程序流,完成一定的任务。程序流是由若干个语句组成的,语句可以是一条单一的语句,也可以是复合语句。P...

tony关东升
2018/07/30
0
0
C语言再学习--关键字

C语言一共有32个关键字,如下表所示: 关键字 说明 auto 声明自动变量 short 声明短整型变量或函数 int 声明整型变量或函数 long 声明长整型变量或函数 float 声明浮点型变量或函数 double 声...

qq_29350001
2016/11/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

springboot2.0 maven打包分离lib,resources

springboot将工程打包成jar包后,会出现获取classpath下的文件出现测试环境正常而生产环境文件找不到的问题,这是因为 1、在调试过程中,文件是真实存在于磁盘的某个目录。此时通过获取文件路...

陈俊凯
今天
6
0
BootStrap

一、BootStrap 简洁、直观、强悍的前端开发框架,让web开发更加迅速、简单 中文镜像网站:http://www.bootcss.com 用于开发响应式布局、移动设备优先的WEB项目 1、使用boot 创建文件夹,在文...

wytao1995
今天
10
0
小知识:讲述Linux命令别名与资源文件的区别

别名 别名是命令的快捷方式。为那些需要经常执行,但需要很长时间输入的长命令创建快捷方式很有用。语法是: alias ppp='ping www.baidu.com' 它们并不总是用来缩短长命令。重要的是,你将它...

老孟的Linux私房菜
今天
8
0
《JAVA核心知识》学习笔记(6. Spring 原理)-5

它是一个全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。但是 Spring 仍然可以和其他的框架无缝整合。 6.1.1. Spring 特点 6.1.1.1. 轻量级 6.1.1.2. 控制反转 6.1.1....

Shingfi
今天
8
0
Excel导入数据库数据+Excel导入网页数据【实时追踪】

1.Excel导入数据库数据:数据选项卡------>导入数据 2.Excel导入网页数据【实时追踪】:

东方墨天
今天
11
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部