C语言循环坑 -- continue的坑
前言
在使用continue和break时,会出现很多的问题,比如说在一个循环语句中使用了一个continue后它没办法继续执行了,它为什么跳不出去了等等问题,这一篇文章带你们如何避免这些很烦的问题。
这篇文章只是那continue来举例子,break的避坑方法和continue一样,先看一下continue的语法
一、continue语法
1.continue的作用
continue是跳过当前循环,例如现在有一个代码
int i = 0
for(i = 0; i < 100; i++){
if (i % 5 == 0){
continue;
}
printf("%d\n", i);
}
运行的结果为

可以看到,这个程序是碰到5的倍数就要跳出当前循环。
2.语法
只需要加在循环中即可,可参考上面的代码
二、大坑项目
题目
这个题目是我们班的一个同学给我看的,我觉得这个蛮有意思的,感觉大家可能都会在这会跳进这个坑
这道题是这样的:1~100的整数,遇到5的倍数就跳出,否则累加
看到题目后大家都会觉得很简单,可能会产生两种写法
第一种写法就是我们同学写的
#include <stdio.h>
int main(){
int i = 1, sum = 0;
while (i <= 100){
if(i % 5 == 0){
continue;
}
else{
sum += i;
i++;
}
}
return 0;
}
写完之后运行方向没有任何的结果,所以就很懵不知道为什么。
然后第二种写法
这个是我写的,我当时搞懵了,然后就写错了,但可以提供给大家参考一下
#include <stdio.h>
int main(){
int i = 1, sum = 0;
while (i <= 100){
if(i % 5 == 0){
continue;
}
else{
sum += i;
}
i++;
}
return 0;
}
分析
两种方法执行到i = 5时会进入到 if(i % 5 == 0) 中,然后执行 continue 跳出当前循环,然后进入下一次循环,但 i 的值还是保持不变,所以如果要这么写的话需要在 continue 前面添加一个 i++ 操作
正确写法
#include <stdio.h>
int main(){
int i = 1, sum = 0;
while (i <= 100){
if(i % 5 == 0){
i++;
continue;
}
else{
sum += i;
i++;
}
}
return 0;
}
或则第二种方法就是将 while 语句改成 for 语句
#include <stdio.h>
int main(){
int i = 1, sum = 0;
for (i = 1; i <= 100; i++){
if(i % 5 == 0){
continue;
}
else{
sum += i;
}
}
return 0;
}
最后一种方法就是直接不写,觉得复杂咱就不写
#include <stdio.h>
int main(){
int i = 1, sum = 0;
while (i <= 100){
if (i % 5 != 0){
sum += i;
i++;
}
}
return 0;
}
这些办法都可以
三、进坑调试
对于使用 continue 或则是 break 出错的话,有几种方法可以进行调试,但最重要的还是大家在做题或则做项目的时候一定要注意,避免进坑。
第一种
输出计数值
对于上面的那个题,拿到后运行发现没办法输出值,那就可以在代码的前面 printf() 一下你定的输出值
#include <stdio.h>
int main(){
int i = 1, sum = 0;
while (i <= 100){
printf("%d\n", i);
if(i % 5 == 0){
continue;
}
else{
sum += i;
i++;
}
}
return 0;
}
然后再运行看一下是不是计数值 i 没有改变,如果 i 没有改变,就需要再重新看一下这个程序。
第二种
使用编译器自带的调试工具一个一个的查找,如果查找到有一个值没有改变,这样你就可以很好的修改值了。
总结
大家在写练习和程序的时候一定一定要小心谨慎,很多bug都是因为粗心和大意导致的
C语言循环坑 -- continue的坑的更多相关文章
- [R语言]R语言计算unix timestamp的坑
R+mongo的组合真是各种坑等着踩 由于mongo中的时间戳普遍使用的是unix timestamp的格式,因此需要对每天的数据进行计算的时候,很容易就想到对timestamp + gap对方式来实 ...
- Go语言循环判断的使用~
Go 语言条件语句 条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为 true 来决定是否执行指定语句,并在条件为 false 的情况在执行另外的语句. 下图展示了程序语言中条件语句的结 ...
- C语言 ---- 循环分支 iOS学习-----细碎知识点总结
#import <Foundation/Foundation.h> // #import是OC种的导入头文件或者是系统框架的指令 // 定义了一个Season枚举类型enum Seaso ...
- C语言循环剖析(转载)
一.if.else float变量与“零值”进行比较: float fTestVal = 0.0; if((fTestVal >= -EPSINON) && (fTestVal ...
- 写个 Hello world - 前端从入坑到弃坑系列教程(1)
这是一个系列教程<前端从入坑到弃坑>的第一篇. HTML 是什么 说白了,HTML 就是网页的内容.比如你现在正在阅读的这个网页的内容,就是 HTML.如果你还不明白,请继续往下阅读. 写 ...
- c语言学习笔记-continue
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 一.continue函数意义 用于跳过本次循环余下语句,转去判断是否需要执行下次循环 二.continue使用案例 编写代码,对 ...
- Filezilla配置FTP中的坑以及出坑办法
做本科生助教,老板让配置一个FTP传资料交作业,找了一台Windows服务器捣鼓,开始按网上教程自己配置特别麻烦,何西西说用Filezilla比较方便,就去Filezilla官网下载了Filezill ...
- 控制 if 语句 while循环 break continue
if 语句的语法: 1. if 条件 : #引号是将条件与结果分开 代码块 # 四个空格,或者一个tab键,这个是告诉程序满足这个条件的 说明: 当条件成立的时候(True), 代码块会被执行 ...
- R语言 循环
R语言循环 可能有一种情况,当你需要执行一段代码几次. 通常,顺序执行语句. 首先执行函数中的第一个语句,然后执行第二个语句,依此类推. 编程语言提供允许更复杂的执行路径的各种控制结构. 循环语句允许 ...
- C语言-循环结构及break、continue
循环结构 --1-- 结构循环 1.1 while循环 1.2 do…while循环 1.3 for循环 --2-- break和continue 2.1 break关键字 2.2 continue关 ...
随机推荐
- Appweb交叉编译
Appweb交叉编译 编译环境:ubuntu-12.04 x64 开发平台:Hi3535 arm版 编译版本:appweb-6.1.1.zip 下载地址=> Appweb web site: h ...
- mysql基础_事务
定义 一个事务其实就是一个完整的业务逻辑,是一个最小的工作单元,不可再分,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败. 例如:王五向赵六的账户上转 ...
- 超声波、毫米波、ToF激光雷达——在低功耗场景的应用选型
前言: 目前主要的测距方式有:光学测距,超声波和微波雷达测距. 光学测距又可以分为:双目,结构光,ToF.微波雷达,在消费类产品中,常见的是波长在毫米级别的毫米波雷达.超声波应用比较多的是在车载倒车雷 ...
- P2482 [SDOI2010] 猪国杀
方法论 这是一道复杂的模拟题.由于游戏规则的条目很多,我们需要仔细考虑程序的组织.否则,在编写程序的过程中极容易陷入停滞的状态(不知道下一步应该怎么做),或在发现程序出问题时,难以快速定位到错误点,对 ...
- 2023-01-09:以下go语言代码输出什么?A:+Inf; B:zero; C:something else; D:doesn‘t compile。 package main import (
2023-01-09:以下go语言代码输出什么?A:+Inf: B:zero: C:something else: D:doesn't compile. package main import ( & ...
- 2020-10-23:go中channel的创建流程是什么?
福哥答案2020-10-23:1.元素大小是否小于2的16次方,否则throw.2.对齐检查,否则throw.3.元素大小和容量的乘积不能超出范围,否则panic.4.生成*hchan,设置buf.4 ...
- 2022-02-09:k8s安装redis,yaml如何写?
2022-02-09:k8s安装redis,yaml如何写? 答案2022-02-29: apiVersion: apps/v1 kind: Deployment metadata: labels: ...
- [MAUI程序设计]界面多态与实现
目录 需求一:在不同设备上使用不同 UI 外观 定义控件 UI 外观 基于平台自定义配置 需求二:在不同数据类别中使用不同的 UI 外观 定义视图 UI 外观 创建数据模板 创建选择器 定义数据 需求 ...
- vue全家桶进阶之路21:Vue Loader 打包单位件组件
Vue Loader 是一个 webpack 插件,它允许在单个文件中定义 Vue 组件,并将其包装为 CommonJS 模块,以便在应用程序中使用.使用 Vue Loader 打包的组件被称为单文件 ...
- PyQt5入门之QLineEdit
QLineEdit:输入单行文本 下面描述了默认的键绑定.行编辑还提供了一个上下文菜单(通常通过单击鼠标右键进行调用),它提供了其中一些编辑选项. 按键 动作 Left Arrow 将光标向左移动一个 ...