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

news2025/2/25 3:12:12

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

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

在之前的博客中我们提及到了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.coloradmin.cn/o/2304664.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mac下Python版本管理,适用于pyenv不起作用的情况

前言 声明&#xff1a;之前也在网上看到过可以使用pyenv来管理python版本&#xff0c;但由于作者的python安装路径实在是繁杂不堪&#xff0c;因此安装完成pyenv体验下来没有任何用处&#xff0c;但偶然发现vscode似乎可以看到各个python版本&#xff0c;因此写下这篇博客记录…

网络安全知识--网络、网络安全产品及密码产品概述

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 网络结构 网络设备&#xff1a;交换机、路由器、负载均衡 安全设备&#xff1a; 通信网络安全类:通信安全、网络监测与控制 区域边界安全类&#xff1a;隔离类…

WiFi相关功能使用教程(wpa_supplicant及wpa_cli)

WiFi相关功能使用教程(wpa_supplicant及wpa_cli) 在之前的博客文中&#xff0c;我们已经成功交叉编译了wpa_supplicant和wpa_cli相关文件。 此篇文章中我们将介绍如何使用和配置WiFi模块。 先将生成的可执行文件拷贝到设备里 采用TFTP的方式拷贝到设备中并全都加上可执行权限…

CentOS7 离线安装 Postgresql 指南

一、背景 服务器通常都是离线内网环境&#xff0c;想要通过联网方式一键下载安装 Postgresql 不太现实&#xff0c;本文将介绍如何在 CentOS7 离线安装 Postgresql&#xff0c;以及遇到困难如何解决。 二、安装包下载 先在本地下载好 rpm 包&#xff0c;再通过 ftp 上传到服…

C/C++后端开发面经

字节跳动 客户端开发 实习 一面(50min) 自我介绍是否愿意转语言,是否只愿意搞后端选一个项目来详细谈谈HTTP和HTTPS有什么区别?谈一下HTTPS加密的具体过程&#xff1a; 非对称加密 对称加密 证书认证的方式 非对称加密是为了保证对称密钥的安全性。 对称…

路由器的WAN口和LAN口有什么区别?

今时今日&#xff0c;移动终端盛行的时代&#xff0c;WIFI可以说是家家户户都有使用到的网络接入方式。那么路由器当然也就是家家户户都不可或缺的设备了。而路由器上的两个实现网络连接的基础接口 ——WAN 口和 LAN 口&#xff0c;到底有什么区别&#xff1f;它们的功能和作用…

CSS通过webkit-scrollbar设置滚动条样式

查看::-webkit-scrollbar-*各项关系 以下图为例&#xff0c;可以分别定义滚动条背景、滚动轨道、滚动滑块的样式。 需要先给外部容器设置高度&#xff0c;再设置overflow: auto&#xff0c;最后设置三个webkit属性。 <!DOCTYPE html> <html lang"en">…

Seata1.5.2学习(二)——使用分布式事务锁@GlobalLock

目录 一、创建数据库 二、配置consumer-service 1.pom.xml 2.application.properties 3.启动类 4.其他代码 三、配置provider-service 1.pom.xml 2.application.properties 3.启动类 4.其他代码 四、分布式事务问题演示与解决办法 (一)分布式事务问题演示 (二)…

华为 网络安全 认证

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 华为 网络安全 认证&#xff1a;保障信息安全的重要一环 在数字化时代的今天&#xff0c;网络安全成为了企业和个人都需要高度重视的问题。尤其是在企业信息化的…

网络运维学习笔记 019 HCIA-Datacom综合实验03

文章目录 综合实验3实验需求一&#xff1a;A公司网络规划二&#xff1a;B公司网络规划 配置一、ip、vlan、vlanif&#xff0c;stp、eth-trunkSW1SW2SW3R1 二、ospfSW1R1 三、NATR1ISP 四、拒绝ping允许httpSW1 五、右半部分vlan、dhcp、ospf、NATSW4R2 综合实验3 实验需求 一&…

网络运维学习笔记 015网工初级(HCIA-Datacom与CCNA-EI)NAT网络地址转换

文章目录 NAT(Network Address Translation&#xff0c;网络地址转换)思科&#xff1a;1&#xff09;PAT2&#xff09;静态端口转换 华为&#xff1a;1&#xff09;EasyIP2&#xff09;NAT Server静态NAT&#xff1a;动态NAT&#xff1a;实验1&#xff1a;在R1上配置NAPT让内网…

蓝桥杯刷题25.2.22|打卡

一、幸运数 3491 谨记&#xff1a;使用函数&#xff0c;拆分成多个小问题&#xff0c;不容易出错 #include <iostream> using namespace std; //计算位数 int check(int a){int count0;while(a){aa/10;count;}return count; } bool fun(int sum){int countcheck(sum);int…

骁勇善战的量化利器:多因子模型【量化理论】

我叫补三补四&#xff0c;很高兴见到大家&#xff0c;欢迎一起学习交流和进步 今天来讲一讲alpha策略制定后的测试问题 风险模型雏形 股票因子受多种因素影响&#xff0c;其价格由多种因素决定&#xff0c;所谓的多因子策略就是要发掘诸如此类的因子&#xff0c;以一种合理的方…

使用Docker部署SearXNG

SearXNG 搜索引擎 SearXNG 是一个整合了超过70个搜索服务结果的免费的私有互联网搜索引擎&#xff0c;用户不会被网站跟踪或被建立档案进行特征分析&#xff0c;良好地保障了用户的隐私。知识库可以有效地弥补大模型的知识欠缺问题&#xff0c;但依旧无法补充或弥补知识库和大…

spring中关于Bean的复习(IOC和DI)

文章目录 1.spring程序开发步骤1.1 导入spring开发的基本包坐标1.2 编写Dao接口和实现类1.3 创建spring核心配置文件1.4 在spring配置文件中配置UserDaoImpl1.5 使用Spring的Api获得Bean实例 2. Bean实例化的三种方式2.1 无参构造方法实例化2.2 工厂静态方法实例化2.3 工厂实例…

Docker内存芭蕾:优雅调整容器内存的极限艺术

title: “&#x1f4be; Docker内存芭蕾&#xff1a;优雅调整容器内存的极限艺术” author: “Cjs” date: “2025-2-23” emoji: “&#x1fa70;&#x1f4a5;&#x1f4ca;” 当你的容器变成内存吸血鬼时… &#x1f680; 完美内存编排示范 &#x1f4dc; 智能内存管家脚本…

一周学会Flask3 Python Web开发-flask3上下文全局变量session,g和current_app

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili flask3提供了session,g和current_app上下文全局变量来方便我们操作访问数据。 以下是一个表格&#xff0c;用于比较Flask中的…

【蓝桥杯单片机】客观题

一、第十三届省赛&#xff08;一&#xff09; 二、第十三届省赛&#xff08;二&#xff09;

QT中经常出现的用法:组合

在 C 中&#xff0c;一个类包含另一个类的对象称为组合&#xff08; Composition &#xff09;。这是一种常见的设计模式&#xff0c;用 于表示一个类是由另一个类的对象组成的。这种关系通常表示一种 " 拥有 " &#xff08; "has-a" &#xff09;的关系。…

下载CentOS 10

1. 进入官网&#xff1a;https://www.centos.org/ 2. 点击右上角的Download进入下载页面。 3. 选择对应的CPU架构&#xff0c;点击ISOs下面的Mirrors开始下载。