循环结构(二)——break和continue的区别、goto语句

上篇文章循环结构(一)——while语句 与 for语句讲解了while循环与for循环,这期博客我们继续讲解有关循环结构的内容。

目录

1.两大循环下的break和continue

1.1 功能描述

1.2 for循环下的break和continue

1.2.1 对比举例

1.3 while循环下的break和continue

1.3.1 对比举例

1.3.2 continue造成的死循环

1.4 嵌套循环下的break和continue

1.4.1 break举例

1.4.2 continue举例

1.4.3 无意义continue

2. goto语句

1.1 语句功能

1.2 适用场景


1.两大循环下的break和continue

在循环执行的过程中,我们可能会出于某些原因,需要提前结束循环。C语言中为我们提供了break 和 continue两个关键字,好让我们实现这种功能。下面我将详细讲解一下这两个关键字的区别。

1.1 功能描述

break  : 当程序运行到这个语句时,会立刻离开这个循环,不再执行break下面的语句。跳出循环后执行循环后面的语句

continue :当程序运行到这个语句时,会立刻跳过本次循环,不再执行continue下面的语句跳出本次循环后,会继续执行循环内的语句,直到循环结束。(在 for 循环和 while 循环中是有所差异的)

1.2 for循环下的break和continue

1.2.1 对比举例

break举例:

for 循环中的 break 也是⽤于终⽌循环的,不管循环还需要循环多少次,只要执行到了 break ,循环就彻底终⽌。

int main()
{
	for (int i = 1; i <= 10; i++)
	{
		if (i == 5)
			break;
		printf("%d ", i);
	}
	printf("\n完成");
	return 0;
}

从运行结果可以看出,当 i 等于5的时候,程序执行了break语句并终止了整个循环。跳出循环后执行了循环外的语句。

continue举例:

如果把上面代码的break改成continue会怎么样?

int main()
{
	for (int i = 1; i <= 10; i++)
	{
		if (i == 5)
			continue;
		printf("%d ", i);
	}
	printf("\n完成");
	return 0;
}

从结果可以看出,当 i 等于5的时候,跳出了第5次循环并直接进入到第6次循环,所以结果并没有数字5。

1.3 while循环下的break和continue

1.3.1 对比举例

break举例:

同样的,break在while语句中也是会终止循环的

continue举例:

用continue取代break就会跳过第5次循环

1.3.2 continue造成的死循环

如果把刚刚的代码改成下面这样,会输出什么呢?

int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			continue;
		printf("%d ", i);
		i++;
	}
	return 0;
}

结果如下:

我们发现终端只打印出1到4,而且程序并没有结束。而如果我们用for循环来执行这个语句就没有问题:

这是因为,在while循环中的循环控制变量的表达式是在循环内部的执行。当 i 等于5时,continue还会跳过控制变量的表达式“ i++;”,所以 循环控制变量i 的值一直没变,最后造成死循环

而for循环中的循环控制变量的表达式是在循环外部执行,不会造成死循环。

这就是continue在while语句和在for语句的区别。当然,do while循环和while循环是类似的,结果也是大差不差,这里不做讲解。

1.4 嵌套循环下的break和continue

无论是break还是continue,都是控制所在层次的循环。

1.4.1 break举例

内层循环的break:

可以看到,此时break在内层,每次当内层循环的 j 等于2时,都会结束 j 循环并继续执行外部 i 循环的语句“printf("%d ", j);”。所以该处的break只结束了内层循环而没有结束外层循环

外层循环的break:

可以看到,此时break在最外层,当 i 等于2时,会结束整个 i 循环。而 j 循环也是 i 循环内的语句,所以两个循环都被结束了。所以外层循环的结束一定会影响内层循环

1.4.2 continue举例

内层循环的continue:

可以看到,此时break在内层,每次当内层循环的 j 等于2时,都会跳过2打印3。所以该处的continue每次只跳过内层循环而没有跳过外层循环

外层循环的continue:

此时continue在最外层,当外层 i 等于2时,不会输出第二次的123。若continue语句放在 j 循环后面,那么第二个123可以被输出,所以外层循环的跳过可能会影响内层循环,这取决于continue对比内层循环的前后位置

1.4.3 无意义continue

当continue位于所在层循环的最后一句时(无论是内层循环的最后一句还是外层循环的最后一句),都不会影响整个嵌套循环,这与没有continue语句的效果是一样的,此时的continue没有意义。

可以发现,无论continue再哪层循环的最后,结果都和没有continue的情况是一样的,这就是无意义的continue。

2. goto语句

1.1 语句功能

C语⾔提供了⼀种⾮常特别的语法,就是 goto语句和跳转标号, goto 语句可以实现在同⼀个函数内跳转到设置好的标号处

句型:

goto  mark            //分号不能省略

……

mark                    //冒号不能省略

        ……

mark是什么由你来决定的,但不能是关键字


goto 语句如果使⽤的不当,就会导致在函数内部随意乱跳转,打乱程序的执⾏流程,所以我们的建 议是能不用尽量不去使用

1.2 适用场景

但是 goto 语句也不是⼀⽆是处,在多层循环的代码中,如果想快速跳出使⽤ goto 就⾮常的⽅便了。

for (...)
{
	for (...)
	{
		for (...)
		{
			...
			if (flag == 0)
				goto error;
		}
	}
}
error:
	if (flag == 0)
		printf("错误");
	else
		printf("XXX情况正确");

如果用break实现这种逻辑,会稍显冗余

for (...)
{
	for (...)
	{
		for (...)
		{
			...
			if (flag == 0)
				break;
		}
		if (flag == 0)
			break;
	}
	if (flag == 0)
		break;
}
if (flag == 0)
	printf("错误");
else
	printf("XXX情况正确");

因为break只能终止一层循环,所以要连用多个 if 语句判断才能完全跳出整个循环。


好了,到这里已经把循环结构的基础知识讲完了,喜欢的同学可以给我点个赞哦。

Thanks♪(・ω・)ノ

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值