C语言番外篇(3)------------>break、continue

news/2025/2/24 15:54:01

看到我的封面图的时候,部分读者可能认为这和编程有什么关系呢?

实际上这个三个人指的是本篇文章有三个部分组成。

在之前的博客中我们提及到了while循环和for循环,在这里面我们学习了它们的基本语法。今天我们要提及的是关于while循环和for循环中的break和continue问题。

不知道while循环如何使用的可以参考:C语言(11)------------->while循环-CSDN博客

不知道for循环如何使用的可以参考:CSDN

一、while循环的break和continue

1.1while循环的break

在讲这个之前,我们使用一个例子回顾一下while循环的使用:

使用while循环打印1~10的数字:

参考代码:

#include <stdio.h>

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

在VS2019中的运行结果:

在中文中,break的含义是打破的意思。把它用在while循环中,是跳过循环,不管循环有多少次,只要break被执行循环就直接停止。

那我们什么时候使用break呢?当某件事情发生时,我们不想再循环时就可以使用break。

那如果在上面的例子中当i的数值为5时我们加上break呢,会出现什么情况呢?

代码:

#include <stdio.h>

int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (5 == i)//避免少写一个等于号
			break;
		printf("%d ",i);
		i++;
	}
	return 0;
}

在VS2019中的运行结果:

我们从运行结果可以看到:

当i的数值等于5的时候,我们执行if控制的语句,也就是break语句,此时直接跳出循环,不在执行循环体里面的内容,也就是执行while大括号后面的return 0,所以打印到4的时候,我们就停下来了。我画了一幅草图,希望能够帮助到你。

 

那我们来看看加上break后的程序流程图:

我们可以看到使用break后会直接到结束的位置。 

1.2while循环的continue

continue在中文的意思是持续的意思。它在C语言中又有什么作用呢?

continue的作用是跳过本次循环continue后边内容的代码,直接去判断部分。

具体是什么意思,我们来看一个例子。把上面1.1的例子中的break改成continue:

参考代码:

#include <stdio.h>

int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (5 == i)//避免少写一个等于号
			continue;
		printf("%d ", i);
		i++;
	}
	return 0;
}

在VS2019中的运行结果:

 

结果是1 2 3 4,好像不是期待的1 2 3 4 5 6 7 8 9。为什么会是这样呢?

我们执行到i==4的时候,判断条件不成立,打印4,然后执行i++。循环判断i==5,<=10是成立的,此时往下面执行,到达if语句后,5==5成立,执行if语句所控制的部分,即continue语句。跳出此次循环,后面的printf函数和i++不执行,也就是i==5不变。下一次循环判断仍然满足条件,进入循环体,执行if语句控制的部分,又跳出循环,i还是5。如此循环往复,进入了死循环。

所以我们的光标会卡在4后面。

之前我的博客中提及到了while循环缺陷的部分,说了有不利于调整的缺点。到这里,不知道您对此是否有所领悟呢?

那我们来看看加上continue后的程序流程图:

加上一个continue后,跳出本次循环,再次进入判断条件,判断是否循环。

如果学会了,那我再把上面的代码修改一下,先不看运行结果,分析一下屏幕上打印的内容应该是什么。

参考代码:

#include <stdio.h>

int main()
{
	int i = 1;
	while (i <= 10)
	{
		i++;
		if (5 == i)//避免少写一个等于号
			continue;
		printf("%d ", i);
	}
	return 0;
}

在VS2019中的运行结果:

自己可以想一想为什么是这样,如果有疑问,欢迎再评论区提问。

二、for循环中的break和continue

2.1for循环的break

例子:打印1~10的数字

(1)未加入break前的for循环:

参考代码:

#include <stdio.h>

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

在VS2019中的运行结果:

(2)加入break后的for循环:

参考代码:

#include <stdio.h>

int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (5 == i)//避免少写一个等于号
			break;
		printf("%d ",i);
	}
	return 0;
}

在VS2019中的运行结果:

 为什么是这样呢?相信看了while循环的break的例子应该多少有些理解了。但是我还是解释一下:

那我们来看看加上break后的程序流程图:

 2.2for循环的continue

 若将2.1中的break改成continue又会出现什么呢?还会和while循环的情况一样吗?

参考代码:

#include <stdio.h>

int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (5 == i)//避免少写一个等于号
			continue;
		printf("%d ", i);
	}
	return 0;
}

在VS2019中的运行结果:

运行结果中,我们可以看到,并不会像while循环中进入到了死循环,为什么不会死循环呢?

因为这里的调整部分并不在continue后面,而是在for循环的调整部分。相信看到这个地方的你,对for循环为什么是优于while循环的有所理解了。

 那我们来看看加上continue后的程序流程图:

使用continue后会跳过本次循环,进入for循环的调整部分,再次判断是否满足循环条件。 

三、for循环的三个部分讲解

先给出结论:for循环的三个部分都可以省略。我们来看一段三个部分都省略的代码:

参考代码:

#include <stdio.h>

int main()
{
	for (; ; )
	{
		printf("hello world\n");
	}
	return 0;
}

在VS2019中的运行结果:

 如果只省略调整部分呢?

(1)初始条件不满足判断条件

参考代码:

#include <stdio.h>

int main()
{
	int i = 0;
	for (i=1 ; i<=10 ; )
	{
		printf("hello world\n");
	}
	return 0;
}

在VS2019中的运行结果:

(2)初始条件满足判断条件 

参考代码: 

#include <stdio.h>

int main()
{
	int i = 0;
	for (i = 1; i != 1; )
	{
		printf("hello world\n");
	}
	return 0;
}

在VS2019中的运行结果:

 

省略了调整部分,就会和我们初始设置与判断条件有关。若初始条件是满足判断条件的,那么程序就会进入死循环。 

那如果省略了判断部分呢?那就会默认为判断条件为真,条件成立,进入死循环。

参考代码:

#include <stdio.h>

int main()
{
	int i = 0;
	for (i = 1; ; i++ )
	{
		printf("hello world\n");
	}
	return 0;
}

在VS2019中的运行结果:


http://www.niftyadmin.cn/n/5864556.html

相关文章

MyBatis Plus扩展功能

一、代码生成器 二、逻辑删除 三、枚举处理器 像状态字段我们一般会定义一个枚举&#xff0c;做业务判断的时候就可以直接基于枚举做比较。但是我们数据库采用的是int类型&#xff0c;对应的PO也是Integer。因此业务操作时必须手动把枚举与Integer转换&#xff0c;非常麻烦。 …

低功耗设计:(3)架构级优化

在上一期文章中&#xff0c;介绍了系统级低功耗设计的方法&#xff0c;如软硬件协同设计、功耗管理机制等。 本期将深入探讨架构级低功耗设计的核心技术&#xff0c;包括多电压设计&#xff08;Multi-VDD&#xff09;、动态电压频率调节&#xff08;DVFS&#xff09;、系统时钟…

通过C语言实现“数据结构”课程中的链表,数据,数,图

链表 链表是一种线性数据结构&#xff0c;其中元素不是存储在连续的内存位置&#xff0c;而是通过指针链接在一起。每个元素称为一个节点&#xff0c;包含数据部分和指向下一个节点的指针。 单向链表示例&#xff1a; 假设有一个链表包含三个节点&#xff1a;1 -> 2 ->…

maven模块化管理

将一个大项目拆分成若干个子模块&#xff0c;方便项目管理维护、扩展&#xff0c;也方便模块间的相互引用&#xff0c;资源共享 具体步骤 先创建一个空项目&#xff08;父项目&#xff09;即下图的sky-take-out,然后打开项目结构的模块&#xff0c;选中父模块&#xff0c;再点…

支持向量机(SVM)在 NLP 中的使用场景

支持向量机(Support Vector Machine, SVM)是一种强大的监督学习算法,广泛应用于分类任务中。由于其出色的分类性能和高效的计算特点,SVM 已经成为自然语言处理(NLP)领域中的一种经典模型。SVM 在 NLP 中的应用非常广泛,尤其在文本分类任务中,表现出色。 本文将探讨 SV…

深度解析:大模型在多显卡服务器下的通信机制与分布式训练——以DeepSeek、Ollama和vLLM为例

一、引言&#xff1a;大模型与多显卡的必然结合 随着大模型参数规模突破千亿级&#xff08;如GPT-4、DeepSeek&#xff09;&#xff0c;单显卡的显存容量与算力已无法满足需求。多显卡并行计算成为训练与推理的核心技术&#xff0c;其核心挑战在于高效通信与负载均衡。本文以国…

《论多源数据集成及应用》审题技巧 - 系统架构设计师

论多源数据集成及应用写作框架 一、考点概述 本论题“论多源数据集成及应用”主要考察的是计算机软件测试工程师在数据管理和集成方面的专业知识与实践能力。论题聚焦于信息爆炸时代企业、组织和个人所面临的数据挑战&#xff0c;特别是如何有效地收集、整理和清洗来自不同渠…

Spring Security+JWT+Redis实现项目级前后端分离认证授权

1. 整体概述 权限管理包括用户身份认证和授权两部分&#xff0c;简称认证授权。对于需要访问控制到资源&#xff0c;用户首先经过身份认证&#xff0c;认证通过后用户具有该资源的访问权限方可访问。 1.1 认证概述 认证是确认用户身份的过程&#xff0c;确保用户是谁。 1.1.1 …