打印
[经验分享]

C语言循环坑 -- continue的坑

[复制链接]
3287|34
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
前言
在使用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都是因为粗心和大意导致的
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/zagzag001/article/details/124758182

使用特权

评论回复
沙发
sheflynn| | 2025-3-9 22:18 | 只看该作者
当循环条件包含多个变量时,continue 可能导致某些条件未被正确处理。

使用特权

评论回复
板凳
wengh2016| | 2025-3-11 15:37 | 只看该作者
在使用 continue 时,如果循环条件没有正确更新,可能会导致无限循环。

使用特权

评论回复
地板
mmbs| | 2025-3-12 18:21 | 只看该作者
过度使用continue会使代码变得难以阅读和理解,因为它打破了正常的执行流程。

使用特权

评论回复
5
yeates333| | 2025-3-12 21:31 | 只看该作者
过度使用continue会使代码逻辑变得难以理解和维护。在可能的情况下,尽量通过重构循环逻辑来避免使用continue,使代码更加清晰。

使用特权

评论回复
6
maqianqu| | 2025-3-12 22:02 | 只看该作者
在多条件循环或嵌套结构中,需仔细验证逻辑流程。

使用特权

评论回复
7
mmbs| | 2025-3-14 13:08 | 只看该作者
在嵌套循环中使用continue时,需要明确continue影响的是哪一层循环。continue只会影响它所在的那一层循环。

使用特权

评论回复
8
yeates333| | 2025-3-14 13:42 | 只看该作者
在 while/do-while 循环中,循环变量的更新应在 continue 之前完成。

使用特权

评论回复
9
loutin| | 2025-3-14 20:33 | 只看该作者
while 和 do-while 循环中,continue 会跳过循环体内的所有语句,但不会跳过循环条件的检查。

使用特权

评论回复
10
iyoum| | 2025-3-14 20:48 | 只看该作者
continue语句会导致跳过当前迭代中continue之后的所有语句。如果循环中有必须执行的清理或更新操作,而这些操作被continue跳过,则可能会导致逻辑错误或资源泄露。

使用特权

评论回复
11
kkzz| | 2025-3-15 10:42 | 只看该作者
考虑使用更清晰的控制结构,如if-else语句,来代替continue。

使用特权

评论回复
12
sdCAD| | 2025-3-15 11:26 | 只看该作者
循环体中的条件判断和continue语句非常频繁,可能会对性能产生一定的影响,尤其是在处理大量数据时。

使用特权

评论回复
13
hudi008| | 2025-3-15 12:08 | 只看该作者
在 for 循环中,continue 不会跳过增量部分;在 while 和 do-while 循环中,continue 不会跳过条件检查。

使用特权

评论回复
14
usysm| | 2025-3-15 12:28 | 只看该作者
过度或不恰当地使用continue可能会使代码难以理解和维护。特别是当多个continue语句嵌套在复杂的条件结构中时,代码的流程会变得不清晰。

使用特权

评论回复
15
alvpeg| | 2025-3-15 12:56 | 只看该作者
在 ‌for 循环中,continue 会跳过循环体的剩余代码,但不会跳过循环变量的更新(即 i++)。这可能导致误解。

使用特权

评论回复
16
earlmax| | 2025-3-15 13:16 | 只看该作者
在使用 continue 时,确保循环条件和变量在 continue 之前或之后正确更

使用特权

评论回复
17
pentruman| | 2025-3-15 16:22 | 只看该作者
在可能的情况下,重构代码以消除continue的使用,使循环逻辑更加直观。

使用特权

评论回复
18
mikewalpole| | 2025-3-15 17:26 | 只看该作者
在使用continue之前,确保完全理解它对循环流程的影响。

使用特权

评论回复
19
saservice| | 2025-3-15 18:31 | 只看该作者
如资源释放、状态更新等操作应放在 continue 之前。

使用特权

评论回复
20
usysm| | 2025-3-15 18:43 | 只看该作者
在 continue 之后,如果循环变量没有正确更新,可能会导致预期之外的行为。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

176

主题

4250

帖子

5

粉丝