C语言番外篇(3)------------>break、continue
看到我的封面图的时候,部分读者可能认为这和编程有什么关系呢?
实际上这个三个人指的是本篇文章有三个部分组成。
在之前的博客中我们提及到了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中的运行结果:

相关文章:
C语言番外篇(3)------------>break、continue
看到我的封面图的时候,部分读者可能认为这和编程有什么关系呢? 实际上这个三个人指的是本篇文章有三个部分组成。 在之前的博客中我们提及到了while循环和for循环,在这里面我们学习了它们的基本语法。今天我们要提及的是关于while循环和for…...
Mac下Python版本管理,适用于pyenv不起作用的情况
前言 声明:之前也在网上看到过可以使用pyenv来管理python版本,但由于作者的python安装路径实在是繁杂不堪,因此安装完成pyenv体验下来没有任何用处,但偶然发现vscode似乎可以看到各个python版本,因此写下这篇博客记录…...
网络安全知识--网络、网络安全产品及密码产品概述
🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快 网络结构 网络设备:交换机、路由器、负载均衡 安全设备: 通信网络安全类:通信安全、网络监测与控制 区域边界安全类:隔离类…...
WiFi相关功能使用教程(wpa_supplicant及wpa_cli)
WiFi相关功能使用教程(wpa_supplicant及wpa_cli) 在之前的博客文中,我们已经成功交叉编译了wpa_supplicant和wpa_cli相关文件。 此篇文章中我们将介绍如何使用和配置WiFi模块。 先将生成的可执行文件拷贝到设备里 采用TFTP的方式拷贝到设备中并全都加上可执行权限…...
CentOS7 离线安装 Postgresql 指南
一、背景 服务器通常都是离线内网环境,想要通过联网方式一键下载安装 Postgresql 不太现实,本文将介绍如何在 CentOS7 离线安装 Postgresql,以及遇到困难如何解决。 二、安装包下载 先在本地下载好 rpm 包,再通过 ftp 上传到服…...
详解 为什么 tcp 会出现 粘包 拆包 问题
TCP 会出现 粘包 和 拆包 问题,主要是因为 TCP 是 面向字节流 的协议,它不关心应用层发送的数据是否有边界,也不会自动分割或合并数据包。由于 TCP 的流控制和传输机制,数据可能在传输过程中被拆分成多个小的 TCP 包,或…...
C/C++后端开发面经
字节跳动 客户端开发 实习 一面(50min) 自我介绍是否愿意转语言,是否只愿意搞后端选一个项目来详细谈谈HTTP和HTTPS有什么区别?谈一下HTTPS加密的具体过程: 非对称加密 对称加密 证书认证的方式 非对称加密是为了保证对称密钥的安全性。 对称…...
HTML之JavaScript DOM编程获取元素的方式
HTML之JavaScript DOM编程获取元素的方式 1.获得document DOM树window.document(是window的属性)2.从document中获取要操作的元素1.直接获取var aaa document.getElementById("username") // 根据元素的id值获取页面上的唯一一个元素,有同名的则返回找到的第一个var…...
路由器的WAN口和LAN口有什么区别?
今时今日,移动终端盛行的时代,WIFI可以说是家家户户都有使用到的网络接入方式。那么路由器当然也就是家家户户都不可或缺的设备了。而路由器上的两个实现网络连接的基础接口 ——WAN 口和 LAN 口,到底有什么区别?它们的功能和作用…...
人工智能(AI):科技新纪元的领航者
摘要 人工智能(AI)作为当今科技领域最具变革性的力量之一,正以惊人的速度重塑着我们的世界。本文旨在全面且专业地介绍人工智能,涵盖其定义、发展历程、关键技术、应用领域、面临的挑战以及未来展望等方面,以期为读者…...
CSS通过webkit-scrollbar设置滚动条样式
查看::-webkit-scrollbar-*各项关系 以下图为例,可以分别定义滚动条背景、滚动轨道、滚动滑块的样式。 需要先给外部容器设置高度,再设置overflow: auto,最后设置三个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.其他代码 四、分布式事务问题演示与解决办法 (一)分布式事务问题演示 (二)…...
三级分类bug解决
文章目录 前端后端 前端 <!DOCTYPE html> <html xmlns:th"http://www.thymeleaf.org" lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0&q…...
华为 网络安全 认证
🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快 华为 网络安全 认证:保障信息安全的重要一环 在数字化时代的今天,网络安全成为了企业和个人都需要高度重视的问题。尤其是在企业信息化的…...
企业金融数字场景平台:架构设计、实践与未来趋势
随着数字化转型的深入,企业金融领域正经历着前所未有的变革。中国民生银行信息科技部赵鑫团队提出的《企业金融数字场景平台》架构设计,不仅展现了金融科技的前沿应用,也为行业提供了宝贵的实践经验和未来发展的新视角。 架构设计࿱…...
网络运维学习笔记 019 HCIA-Datacom综合实验03
文章目录 综合实验3实验需求一:A公司网络规划二:B公司网络规划 配置一、ip、vlan、vlanif,stp、eth-trunkSW1SW2SW3R1 二、ospfSW1R1 三、NATR1ISP 四、拒绝ping允许httpSW1 五、右半部分vlan、dhcp、ospf、NATSW4R2 综合实验3 实验需求 一&…...
Python--函数进阶(上)
1. 参数深入理解 1.1 参数传递的内存机制 Python中参数传递的是内存地址(引用传递),而非值拷贝。这意味着: 可变对象(列表、字典)在函数内修改会影响外部变量。不可变对象(数字、字符串&…...
Linux 常见面试题汇总
在当今数字化时代,Linux 作为一种开源、稳定且高效的操作系统,在服务器领域占据着举足轻重的地位。无论是运维工程师、开发人员还是系统管理员,掌握 Linux 相关知识都成为了必备技能。这篇博客将为大家汇总一些常见的 Linux 面试题࿰…...
网络运维学习笔记 015网工初级(HCIA-Datacom与CCNA-EI)NAT网络地址转换
文章目录 NAT(Network Address Translation,网络地址转换)思科:1)PAT2)静态端口转换 华为:1)EasyIP2)NAT Server静态NAT:动态NAT:实验1:在R1上配置NAPT让内网…...
蓝桥杯刷题25.2.22|打卡
一、幸运数 3491 谨记:使用函数,拆分成多个小问题,不容易出错 #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…...
学习笔记-沁恒第五讲-米醋
一,设置音量 上次 这次 #include "uart.h" #include "debug.h" void audio_init() { Usart3_Init(); } void audio_play(u8 num) { u8 string[]{0x7e,0x05,0x41,0x00,num,0x05^0x41^0x00^num,0xef}; u8 i; for(i0;i<7;i) { USART_Se…...
骁勇善战的量化利器:多因子模型【量化理论】
我叫补三补四,很高兴见到大家,欢迎一起学习交流和进步 今天来讲一讲alpha策略制定后的测试问题 风险模型雏形 股票因子受多种因素影响,其价格由多种因素决定,所谓的多因子策略就是要发掘诸如此类的因子,以一种合理的方…...
Android Loader机制解析
参考: Android Loader 机制...
使用Docker部署SearXNG
SearXNG 搜索引擎 SearXNG 是一个整合了超过70个搜索服务结果的免费的私有互联网搜索引擎,用户不会被网站跟踪或被建立档案进行特征分析,良好地保障了用户的隐私。知识库可以有效地弥补大模型的知识欠缺问题,但依旧无法补充或弥补知识库和大…...
C# ConcurrentQueue 使用详解
总目录 前言 在C#多线程编程中,数据共享如同走钢丝——稍有不慎就会引发竞态条件(Race Condition)或死锁。传统Queue<T>在并发场景下需要手动加锁,而ConcurrentQueue<T>作为.NET Framework 4.0 引入的线程安全集合&a…...
armv7l
在 **ARMv7l** 中,最后的字符是字母 **“l”**(小写字母 “L”),而不是数字 **“1”**。 --- ### 1. **ARMv7l 的含义** - **ARMv7**:指的是 **ARM 架构的第 7 代版本**,是一种广泛应用于嵌入式系统&…...
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: “💾 Docker内存芭蕾:优雅调整容器内存的极限艺术” author: “Cjs” date: “2025-2-23” emoji: “🩰💥📊” 当你的容器变成内存吸血鬼时… 🚀 完美内存编排示范 📜 智能内存管家脚本…...
一周学会Flask3 Python Web开发-flask3上下文全局变量session,g和current_app
锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili flask3提供了session,g和current_app上下文全局变量来方便我们操作访问数据。 以下是一个表格,用于比较Flask中的…...
【蓝桥杯单片机】客观题
一、第十三届省赛(一) 二、第十三届省赛(二)...
