news 2026/3/17 18:16:55

C语言(从入门到精通)7---for 循环、do-while循环、break 和countine 的用法、goto语句

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言(从入门到精通)7---for 循环、do-while循环、break 和countine 的用法、goto语句

C语言学习笔记(从入门到精通) 第7部分
循环结构:for、do-while、break、continue、goto

C语言中实现重复执行代码的主要方式就是循环语句。本节重点讲解最常用的三种循环以及控制循环流程的关键语句。

1. for 循环(最常用)

语法格式:

for(初始化表达式;条件表达式;增量表达式){循环体语句;}

执行流程:

  1. 先执行初始化表达式(只执行一次)
  2. 判断条件表达式是否为真
    • 如果为真 → 执行循环体 → 执行增量表达式 → 回到第2步
    • 如果为假 → 跳出循环

经典写法示例:

#include<stdio.h>intmain(){// 打印 1 到 10for(inti=1;i<=10;i++){printf("%d ",i);}printf("\n");// 求 1+2+...+100intsum=0;for(inti=1;i<=100;i++){sum+=i;}printf("1+2+...+100 = %d\n",sum);return0;}

for 循环的几种常见变体:

// 1. 省略初始化(已经在外面定义了变量)inti=1;for(;i<=10;i++){...}// 2. 省略条件(相当于 while(1) 死循环)for(inti=0;;i++){...}// 3. 省略增量(在循环体内自己改)for(inti=0;i<10;){printf("%d ",i);i+=2;// 步长 2}// 4. 完全空 for(死循环)for(;;){...}// 等价于 while(1)

2. while 循环 与 do-while 循环

while 循环(先判断后执行)

while(条件表达式){循环体;}

do-while 循环(先执行后判断,至少执行一次)

do{循环体;}while(条件表达式);注意:最后的分号;一定不能忘!

三者对比示例(输入正整数,输入负数或0结束)

#include<stdio.h>intmain(){intnum;// 方式1:while 先判断printf("while 版本(可能一次都不执行):\n");printf("请输入正整数(输入<=0结束):");scanf("%d",&num);while(num>0){printf("你输入了:%d\n",num);printf("请输入正整数(输入<=0结束):");scanf("%d",&num);}// 方式2:do-while 先执行printf("\ndo-while 版本(至少执行一次):\n");do{printf("请输入正整数(输入<=0结束):");scanf("%d",&num);if(num>0){printf("你输入了:%d\n",num);}}while(num>0);return0;}

小结:什么时候用哪种循环?

  • 确定循环次数→ 优先用for
  • 不确定循环次数,但至少执行一次→ 用do-while
  • 不确定循环次数,先判断条件→ 用while

3. break 和 continue

break:立即跳出当前所在的循环(彻底结束循环)

continue:结束本次循环,立刻进入下一次循环(跳过本次循环剩余部分)

对比示例(打印 1~20 中不是 3 的倍数的数字)

#include<stdio.h>intmain(){printf("使用 continue 跳过 3 的倍数:\n");for(inti=1;i<=20;i++){if(i%3==0){continue;// 跳过本次循环,i++ 继续下一轮}printf("%d ",i);}printf("\n\n");printf("使用 break 在遇到 15 就结束:\n");for(inti=1;i<=20;i++){if(i==15){break;// 直接结束整个循环}printf("%d ",i);}printf("\n");return0;}

多层循环中 break 只跳出最近的一层

for(inti=1;i<=3;i++){for(intj=1;j<=5;j++){if(j==3)break;// 只跳出 j 这一层循环printf("i=%d, j=%d\n",i,j);}}

4. goto 语句(不推荐使用,但要了解)

语法:

goto标签名;...标签名:语句;

常见两种用法(了解即可)

// 用法1:跳出多层循环(替代多层 break)for(inti=0;i<10;i++){for(intj=0;j<10;j++){if(某种很深的条件成立){gotoEND;// 直接跳到最外层结束}}}END:printf("结束\n");
// 用法2:简化某些错误处理(早期代码常见)if(打开文件失败)gotoERROR;if(读取失败)gotoERROR;...ERROR:printf("发生错误\n");return-1;

现代编程观点

  • 强烈不推荐在普通业务逻辑中使用goto
  • 99% 的goto都可以用结构化方式(break、continue、函数返回、异常处理等)替代
  • 唯一合理场景:多层嵌套跳出C语言中集中错误处理(但现代写法更推荐用函数封装)

总结对比表

语句作用跳出范围是否推荐典型使用场景
for次数确定、计数型循环★★★★★几乎所有计数循环
while条件型,先判断★★★★未知次数,需先判断条件
do-while条件型,至少执行一次★★★至少执行一次的交互场景
break立即结束整个循环当前所在循环★★★★★找到目标、异常退出
continue跳过本次循环剩余部分当前本次循环★★★★过滤掉某些不符合条件的项
goto无条件跳转到指定标签任意位置(危险)☆☆☆极少数多层跳出/错误集中处理

下一节建议学习内容:

  • 循环嵌套与经典案例(打印三角形、九九乘法表、质数判断等)
  • 随机数生成(rand() 和 srand())

有任何不明白的地方或想看具体练习题,都可以直接问我!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/14 18:40:19

【小程序毕设全套源码+文档】基于android的智能健康管理助手app的设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/3/13 21:05:01

2026 AI写论文软件大比拼:学生党适配指南

PaperRed&#xff08;全流程全能降重王者&#xff09;与毕业之家&#xff08;毕业全流程专属查重适配&#xff09;是学生党首选&#xff1b;本科生优先PaperRed免费版按次付费&#xff0c;研究生选PaperRed标准版或毕业之家专业版&#xff0c;预算有限可搭配ChatGPT免费版辅助构…

作者头像 李华
网站建设 2026/3/14 2:52:04

SpringBoot实现mysql数据报表统计并定时推送

通过一个小的业务点出发&#xff0c;搭建一个可以实例使用的项目工程&#xff0c;将各种知识点串联起来; 实战演练专题中&#xff0c;每一个项目都是可以独立运行的&#xff0c;包含若干知识点&#xff0c;甚至可以不做修改直接应用于生产项目&#xff1b; 今天的实战项目主要…

作者头像 李华
网站建设 2026/3/17 0:59:40

AI教材编写新利器!低查重率,一键实现AI教材生成,高效又省心!

教材编写的难题与AI工具的解决方案 在教材编写过程中&#xff0c;如何在原创性和合规性之间找到合适的平衡&#xff0c;成为了一个重要的议题。虽然借鉴一些优秀教材的内容能够丰富新教材&#xff0c;但又会担心查重率的过高。而自主创作知识点时&#xff0c;难免会遇到逻辑混…

作者头像 李华
网站建设 2026/3/16 1:55:22

【小程序毕设源码分享】基于springboot+小程序的校园外卖点餐小程序的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华