C语言中break,continue,return等关键字在循环中 的区别

       在初学C语言时,我们会在做循环题的过程中遇到break,continue,return,这三个关键字会在循环中展现出不同的结果,若不熟悉的这几个关键字的作用,大概率会全军覆没,错的一塌糊涂。接下来,我来讲解一下这些关键字的区别。

       首先来看一组代码,在主函数中,构造了一个循环体,共循环10次,每次都要求输出i的值,

最终的结果也是如图,输出1-10的结果。

一.break在循环中的结果

1.break在while循环中的结果

#define _CRT_SECURE_NO_WARNINGS 1
# include<stdio.h>
int main() {
	int i = 1;
	while (i <= 10) {
		if (i == 5) {
			break;
		}
		printf("%d ", i);
		i++;
	}
	return 0;
}

代码讲解:

       在上图代码的基础上增加了一个限制条件,若i等于5,则break。也就是说前四次的循环都会正常输出i的值,并且逐步递增加1。直到第五次循环开始,会执行break操作!最后的结果就是:

1,2,3,4  (结束)

      那么为何加了break会输出这样的结果,它的作用提现在哪里?

 break:直接跳出当前的循环体(表示不再执行该循环体),强制退出,不管它当前是否遵循限制条件。之后便从循环体后面的语句开始执行。需要注意的是,若使用多层嵌套循环,一个break也只能跳出当前的循环体,外层的想要跳出得多使用几次break才行。

所以:while中的break是用于永久终止循环的。

2.break在for循环中的作用

 break处在for循环中,其结果与while循环的结果相同,都是终止当前循环,以及后面的循环也不再进行,直接跳转到循环体后面的代码。

//嵌套循环
int main() {
	int i = 1;
	for(i=0;i<=10;i++){
		int j = 0;
		for (j = 0; j <= 10; j++) {
			if (j == 5)
				break;
			printf("* ");
		}
		printf("\n");
	}
	return 0;
}

       上图这个代码便是两层嵌套循环,改代码的实现意义是打印一个11*11大小的星型矩阵,外层控制行数,里层控制列数。而在里层循环体中,设置了j等于5时,便break,表明每一行中只打印5个星,break也只影响列数,最终的结果便是11*5大小的矩阵,如下图所示。

 

二.接下来,讲一讲continue在循环中的结果

1.continue在while循环中的作用

//二.continue在循环体中的作用
int main() {
	int i = 1;
	while (i <= 10) {
		if (i == 5) {
			continue;
		}
		printf("%d ", i);
		i++;
	}
	return 0;
}

代码讲解:

       我在上上图的代码中做了改进,只是替换break为continue,要求还是一样,输出i的值。i在等于5时,continue。而最后的结果是:

1,2,3,4 _     (它会处在4后面的下划线中一直跳动,表明死循环了!!!)

 continue:终止循环中的本次循环,且continue后面的代码(循环体内)不再执行,回到循环体的判断部分(i<=10),判断循环是否进行下次循环。

       通过知识了解了continue,回到代码中。因为i=5,跳过了后面代码的执行,i++这个循环体的关键语句也不会执行,所以,i会一直处在5上,一直continue,一直回到循环体判断部分判断,造成死循环的情况,不进不退!这就是continue的作用。

2.continue在for循环中的作用体现如下。 

//continue在for循环中的作用
int main() {
    int i = 0;
    for (i = 1; i <= 10;i++){
        if (i == 5)
            continue;
        printf("%d ", i);
    }
    return 0;

}

但是对于for循环中,continue的作用却发生了改变,对于while循环中,continue被执行后,i++不会被执行,i会一直处于5;而for循环中,continue被执行,程序会直接回到for的调整部分i++被执行,i会继续下一次的循环,在这个循环体中,只是i==5不会被输出,直接跳过,而6,7....仍会继续输出。

这组代码的结果:1,2,3,4,6,7,8,9,10 (结束)

三.return在循环体中的作用

return:执行return操作,直接返回方法,所有该方法体内的代码(包括循环体)都不会再执行。

        先来看一组简单代码

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

在while循环中,在i等于5时,执行了return,根据上面return的执行流程,会直接跳出循环体,直接结束程序,循环体外的printf语句,程序连看都不会看一眼,直接跳出天际hhh。

return在for循环中也是同理。

下图这个代码其实,是我在刷题的过程中遇到的,因为思路不全,导致做不出来,看了看评论区的题解,发现有大神在解题中用到了return。 

#include<stdio.h>
int main() {
    char ch = 0;
    char c[] = {"AEIOUaeiou"};
    int i = 0;
    while ((ch = getchar())!=EOF) {
        for (i = 0; i < 10; i++) {
            if (ch == c[i]) {
                printf("Vowel\n");
                return 0;
            }
        }
        if (i == 10) {
            printf("Consonant\n");
        }
        getchar();
    }
    return 0;
}

       如上图所示,这是一道通过多组输入字符去判断是否为元音还是辅音问题的代码题解(每次执行的时候只输入一个字符),若是输入的字符符合数组c中的内容,则输出Vowel,若输入的字符不符合数组内容,则输出Consonant。里面还包含了嵌套循环。

       刚开始,创建了一个数组,里面包含了26字母中的5个元音字符(大小写共10个),又创建了一个变量ch,当进入外层循环开始第一次输入的时候,我使用ch输入了一个字符B,进入循环开始判断:我输入的字符是否等于数组每一次循环所输出的值,发现10次循环出的结果都不等,便不再执行if语句,最后跳出for循环,执行下一个语句。此时i等于10,也正好符合if判断,输出Consonant(辅音的意思),最后的getchar()意义是输入的字符被截取后,还剩个'\0'字符,不进行截取的话,会影响到下次的输入。

       第二次,我输入了字符'A',进入for中,在里层第一次循环中,便相等,符合if判断,输出Vowel(元音的意思)。而这个return是点睛之笔!若是没有这个return,结果会一直循环输出10次Vowel,然后跳出循环,执行if判断,同时输出Consonant。但这并不符合题目的要求,而且A本就属于元音字母,同时输出元音和辅音就是错的。若是使用break,结果也只不过是输出了一次Vowel,还是要输出Consonant。这个return的作用就很6,输出Vowel后直接跳出所有的循环体,而且所有该方法体内的代码(包括循环体)都不会再执行。这就直接执行后面if判断,发现并不符合,再往后执行getchar(),最终程序结束。也就只输出Vowel,符合题目的要求!!! (我列举的这道题相对来说复杂一些,但很有价值意义!)

以上就是return,break,continue三个关键字在循环体中的区别了! 希望对你们有所帮助!

  • 8
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橙予清的zzz~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值