首页 > 编程笔记

C语言break和continue语句的用法

C语言 break 和 continue 都是转向语句,它们可以改变程序的流程,使程序从其所在的位置转向另一处执行。

C语言 break 语句

break 语句可以用在循环语句或者 switch 语句中:
本文重点介绍 break 在循环中的使用,break 在 switch 语句中的使用请转到:C语言switch case语句的用法(非常详细)

根据程序的目的,有时需要程序在满足另一个特定的条件时立即终止循环,程序继续执行循环体后面的语句,使用 break 语句可以实现此功能。

其一般的语句格式为:

break;

break 语句用在循环语句的循环体内的作用是终止当前的循环语句。

请看下面的例子:
/* 无break语句*/
int sum = 0, number;
scanf("%d",&number);
while (number != 0)
{
    sum += number;
    scanf("%d",&number);
}

/* 有break语句*/
int sum = 0, number;
while (1)
{  
    scanf("%d",&number);
    if (number == 0)
        break;
    sum += number;
}
这两段程序产生的效果是一样的。

需要注意的是,break 语句只是跳出当前的循环语句,对于嵌套的循环语句,break 语句的功能是从内层循环跳到外层循环。例如:
int i = 0, j, sum = 0;
while (i < 5)
{
    for ( j = 0; j < 5; j++)
    {
        sum + = i + j;
        if ( j == i) break;
    }
    i++;
}
本例中的 break 语句执行后,程序立即终止 for 循环语句,并转向 for 循环语句后的下一个语句,即 while 循环体中的 i++ 语句,继续执行 while 循环语句。

示例

输入一个大于 2 的整数,判断该数是否为素数。若是素数,输出“是素数”,否则输出“不是素数”。
#include<stdio.h>
int main()
{
    int m,i,flag;  /*引入标志性变量flag,用0和1分别表示m不是素数或是素数*/
    flag=1;
    printf("请输入一个大于2的整数:");
    scanf("%d",&m);
    for(i=2;i<m;i++)  /*i从2 变化到m-1,并依次去除m*/
    {
        if(m%i==0)  /*如果能整除m,表示m不是素数,可提前结束循环*/
        {
            flag=0;  /*给flag赋值为0*/
            break;     
        }
    }
    if(flag)
        printf("%d是素数!\n",m);
    else
        printf("%d不是素数!\n",m);
}
运行结果:

请输入一个大于2的整数:50
50不是素数!


第 05 行,假设 m 是素数,先给 flag 赋初值为 1,如果不是素数再重新赋值,否则不用改变。

第 08~15 行,通过 for 循环依次用 2~(m-1) 去整除 m,如果能整除,说明 m 不是素数,给 flag 变量赋值为 0,并用 break 语句退出循环(不用再继续循环到 i<m,此刻足以说明 m 不是素数)。

第 16~19 行,通过判断 flag 的值决定输出的内容。

素数是除了 1 和本身不能被其他任何整数整除的整数。判断一个数 m 是否为素数,只要依次用 2、3、4……m-1 作除数去除 m,只要有一个数能整除 m,m 就不是素数;如果没有一个数能整除 m,m 就是素数。

在求解过程中,可以通过使用 break 语句使循环提前结束,不必等到循环条件起作用。而且 break 语句总是作 if 的内嵌语句,即总是与 if 语句一块使用,表示满足什么条件时就结束循环。

C语言 continue 语句

根据程序的目的,有时需要程序在满足另一个特定的条件时结束本次循环重新开始下次循环,使用 continue 语句可实现该功能。

continue 语句的功能与 break 语句不同,其功能是结束当前循环体的执行,而重新执行下一次循环。在循环体中,continue 语句被执行之后,其后面的语句均不再执行。

示例

输出 100~200 所有不能被 3 和 7 同时整除的整数。
#include<stdio.h>
int main()
{   int i,n=0;  /*n计数*/
    for(i=100;i<=200;i++)
    {
        if(i%3==0&&i%7==0)  /*如果能同时整除3和7,不打印*/
        {
            continue;  /*结束本次循环未执行的语句,继续下次判断*/
        }
        printf("%d\t",i);
        n++;
        if(n%10==0)  /*每10个数输出为一行*/
            printf("\n");
    }
}
运行结果:
100     101     102     103     104     106     107     108     109     110
111     112     113     114     115     116     117     118     119     120
121     122     123     124     125     127     128     129     130     131
132     133     134     135     136     137     138     139     140     141
142     143     144     145     146     148     149     150     151     152
153     154     155     156     157     158     159     160     161     162
163     164     165     166     167     169     170     171     172     173
174     175     176     177     178     179     180     181     182     183
184     185     186     187     188     190     191     192     193     194
195     196     197     198     199     200

本范例中,只有当 i 的值能同时被 3 和 7 整除时,才执行 continue 语句,执行后越过后面的语句(printf 语句及后面的部分不执行),直接使 i++,然后判断循环条件 i<=200,再进行下一次循环。只有当 i 的值不能同时被 3 和 7 整除时,才执行后面的 printf 语句及 n++ 语句。

一般来说,它的功能可以用单个的 if 语句代替,如本例 6~13 行:
if(!(i%3==0&&i%7==0)) /*如果能同时整除3和7,不打印*/
{
    printf("%d\t",i);
    n++;
    if(n%10==0) /*每10个数输出一行*/
        printf("\n");
}
这样编写比用 continue 语句更清晰,又不用增加嵌套深度,因此如果能用if语句,就尽量不要用 continue 语句。

优秀文章