C语言循环控制:如何用 break 和 continue 来控制循环

使用while或for循环时,如果想提前结束循环(在不满足结束条件的情况下结束循环),可以使用break或continue。

  • break :跳出循环
  • continue :跳过循环这一轮剩下的语句进入下一轮循环

break

当 break 用于 while、for 循环时,会终止循环而执行整个循环语句后面的代码。break 通常和 if 语句一起使用,即满足条件时便跳出循环。

使用 for 循环判断一个数是不是素数:

#include<stdio.h>
int main()
{
	int x;
	scanf("%d", &x);
	int i;
	int isPrime = 1;
	for ( i=2; i<x; i++ ){
		if ( x % i == 0 ){
		isPrime = 0;
		break;
		}
	}
 	if ( isPrime == 1) {
		printf ("是素数\n");
	} else {
		printf("不是素数\n");
	}
	return 0;
 } 

以上程序中当 isPrime = 0 则执行 break 语句,直接跳出 for 循环,进入下一条语句;不管是while、do…while,for,只要遇到 break 就会跳出循环进入下一条语句。

continue 语句

continue 语句的作用是跳过循环体中剩余的语句而强制进入下一次循环。continue语句只用在 while、for 循环中,常与 if 条件语句一起使用,判断条件是否成立。

使用 for 循环判断一个数是不是素数:

#include<stdio.h>
int main()
{
	int x;
	scanf("%d", &x);
	int i;
	int isPrime = 1;
	for ( i=2; i<x; i++ ){
		if ( x % i == 0 ){
		isPrime = 0;
		continue;
		}
		printf("%d\n",i);
	}
 	if ( isPrime == 1) {
		printf ("是素数\n");
	} else {
		printf("不是素数\n");
	}
	return 0;
 } 

当 isPrime = 0 则执行 continue 语句;结束此轮循环,进入下一轮 for 循环,不会执行下一条语句 :printf("%d\n",i); 如果 isPrime != 0 则不会执行 continue 语句,直接执行下一条语句:printf("%d\n",i);

break vs continue

break vs continue
当判断条件为 True 则进入循环体, 在循环体内遇到 break 则跳出整个循环,如果遇到 continue 则跳过循环这一轮剩下的语句进入下一轮循环。

循环的嵌套

  • 循环里面还是循环

一般来说每一层循环用的控制变量应该是不一样的。

用 for 循环找出100以内的素数:

#include<stdio.h>
int main()
{
	int x;
	for ( x=1; x<=100; x++ ) {
		int i;
		int isPrime = 1;
		for ( i=2; i<x, i++ ) {
			if ( x % i == 0 ) {
				isPrime = 0;
				break;
			}
		}
		if ( isPrime == 1) {
			printf("%d", x);
		}
	}
	return 0;
 } 

第一层循环中的控制变量是 x ;第二层循环中的控制变量是 i 。

如何离开多重循环

break 和 continue

  • 只能对他所在的那层循环做
    例如:用 1角,2角,5角的硬币凑出2元的面额:
#include <stdio.h>
int main()
{	int x;
	int one, two, five; //one为1角,two为2角,five为5角
	x = 2;
	for ( one = 1; one < x*10; one++ ) {
		for ( two = 1; two < x*10/2; two++ ) {
			for ( five = 1; five < x*10/5; five++ ) {
				if ( one + two*2 + five*5 == x*10 ) {
					printf("可以用%d个1角加%d个2角加%d个5角得到%d元\n", 
						one, two, five, x);
				}
			}
		}
	}
	return 0;
}

输出结果为:
在这里插入图片描述
此程序输出了所有用 1角,2角,5角的硬币凑出2元的面额的情况。
如果我只需要一种情况,只要每一个循环得到一个结果就跳出循环,就能输出一种结果,那么我需要在每一层循环都加 break 才能跳出多重循环,并且还需要加一个控制变量:

#include <stdio.h>
int main()
{
	int x;
	int one, two, five;//one为1角,two为2角,five为5角
	int exit = 0;
	x = 2;
	for ( one = 1; one < x*10; one++ ) {
		for ( two = 1; two < x*10/2; two++ ) {
			for ( five = 1; five < x*10/5; five++ ) {
				if ( one + two*2 + five*5 == x*10 ) {
					printf("可以用%d个1角加%d个2角加%d个5角得到%d元\n", 
						one, two, five, x);
					exit = 1;
					break;
				}
			}
			if ( exit == 1 ) break;
		}
		if ( exit == 1 ) break;
	}
	return 0;
}

输出结果为:

可以用1个1角加2个2角加3个5角得到2元

  • 这是一种常用的方法叫做 接力break

如果我只需要一种情况,还有另外一种方法 goto 语句,可以直接在需要跳出循环的地方使用 goto 语句就能跳出多重循环。

#include <stdio.h>
int main()
{
	int x;
	int one, two, five;//one为1角,two为2角,five为5角
	int exit = 0;
	x = 2;
	for ( one = 1; one < x*10; one++ ) {
		for ( two = 1; two < x*10/2; two++ ) {
			for ( five = 1; five < x*10/5; five++ ) {
				if ( one + two*2 + five*5 == x*10 ) {
					printf("可以用%d个1角加%d个2角加%d个5角得到%d元\n", 
						one, two, five, x);
					goto out;
				}
			}
		}
	}
out:	
	return 0;
}

输出结果为

可以用1个1角加2个2角加3个5角得到2元

注意
goto 语句 对其他情况不友好,弹在这种多重循环嵌套循环的内层跳到最外面去是非常适合的。其他环境不建议使用 goto 语句。因为它使得程序的控制流难以跟踪,使程序难以理解和难以修改。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值