C语言break和continue跳出循环(非常详细)

在利用循环结构(forwhile 循环)编程时,我们经常需要提前结束循环(在循环条件成立的情况下强制结束循环),或者跳过某些迭代,此时就可以使用 break 或者 continue 关键字。

一次循环称为一次迭代,例如 for(int i=1; i<=10; i++) 会循环 10 次,所以有 10 次迭代。

C语言break关键字

C语言 break 关键字可以用于 switch case 分支,或者 while 循环,或者 for 循环,它的作用只有一个,就是“跳出”整个语句,结束整个语句的执行。本文只讲解 break 关键字在 while/for 循环中的用法,如果你想了解它在 switch case 语句中的用法,请转到:C语言 switch case 用法详解

在 while/for 循环中,break 关键字用来跳出循环。当程序执行到 break 语句时,会立即终止整个循环,并继续执行循环之后的代码。

break 关键字通常和 if else 语句一起使用,即满足条件时便跳出循环。

使用 while 循环计算从 1 加到 100 的值:
#include <stdio.h>
int main(){
    int i=1, sum=0;
    while(1){  //循环条件为死循环
        sum+=i;
        i++;
        if(i>100) break;  //跳出循环
   }
    printf("%d\n", sum);
    return 0;
}
运行结果:

5050


while 循环条件为 1,是一个死循环。当执行到第 100 次循环的时候,计算完i++;后,i 的值为 101,此时 if 语句的条件 i> 100 成立,执行break;语句,结束循环。

需要注意的是,一个 break 只能跳出一个 while/for 循环。这意味着在多层循环中,一个 break 语句只向外跳出一层;如果需要跳出多层循环,那么每层循环都需要一个 break 语句。

例如,输出一个 4*4 的整数矩阵:
#include <stdio.h>
int main(){
    int i=1, j;
    while(1){  // 外层循环
        j=1;
        while(1){  // 内层循环
            printf("%-4d", i*j);
            j++;
            if(j>4) break;  //跳出内层循环
        }
        printf("\n");
        i++;
        if(i>4) break;  // 跳出外层循环
    }

    return 0;
}
运行结果:
1   2   3   4
2   4   6   8
3   6   9   12
4   8   12  16
当 j>4 成立时,执行break;,跳出内层循环;外层循环依然执行,直到 i>4 成立,跳出外层循环。内层循环共执行了 4 次,外层循环共执行了 1 次。

C语言continue关键字

C语言 continue 关键字只能用在 while 和 for 循环中,它的作用是跳过当前迭代,进入下一次迭代。

程序一旦遇到 continue,就会忽略循环体中的剩余语句,直接进入下一次循环。这意味着,位于 continue 后面代码,在当前迭代(当前循环)中不会被执行,但循环并不会因此而终止,而是继续进行下一次迭代。

continue 关键字常与 if else 语句一起使用,即满足条件是便跳过当前迭代。

例如,判断用户输入的数字,如果不是 4 也不是 5,那么就原样输出:
#include <stdio.h>
int main(){
    char c = 0;
    while(c!='\n'){  //回车键结束循环
        c=getchar();
        if(c=='4' || c=='5'){  //按下的是数字键4或5
            continue;  //跳过当次循环,进入下次循环
        }
        putchar(c);
    }
    return 0;
}
运行结果:

0123456789↙
01236789


程序遇到 while 时,变量 c 的值为'\0',循环条件c!='\n'成立,开始第一次循环。getchar() 使程序暂停执行,等待用户输入,直到用户按下回车键才开始读取字符。

本例我们输入的是 0123456789,当读取到 4 或 5 时,if 的条件c=='4'||c=='5'成立,就执行 continue 语句,结束当前循环,直接进入下一次循环,也就是说putchar(c);不会被执行到。而读取到其他数字时,if 的条件不成立,continue 语句不会被执行到,putchar(c);就会输出读取到的字符。

break 和 continue 的区别

C语言 break 和 continue 都能改变循环的执行流程,但它们之间存在明显的区别:
  • break 会完全终止循环,将执行流程转到 while/for 后面的代码;这意味着,整个循环中的任何语句都不再有执行机会。
  • continue 只是结束本次迭代(跳过当前迭代的剩余代码),直接进入下一次迭代;如果循环条件成立,整个循环还会继续执行。

最后需要注意的是,一个 break/continue 只能作用于一个 while/for 循环,在内层循环中使用 break/continue 并不会影响外层循环。