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

原创
2016/06/19 08:05
阅读数 133

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);
}

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部