C语言if循环中continue的作用是什么?

99ANYc3cd6
预计阅读时长 13 分钟
位置: 首页 C语言 正文

ifcontinue 的区别

要明确一个非常重要的概念:

c语言if循环continue
(图片来源网络,侵删)
  • if 语句:是一个条件判断语句,它根据一个条件的真假(真为1,假为0)来决定是否执行其内部的代码块,它本身不会导致程序“跳转”或“循环”。
  • continue 语句:是一个跳转语句,它只能在循环for, while, do-while)内部使用,它的作用是立即终止**当前**这一次的循环迭代,并直接跳转到下一次循环迭代的开始处。

ifcontinue 本身是两种不同类型的语句,你问的“if循环continue”,通常指的是在 if 语句的代码块里使用 continue,而这个 if 语句又位于一个循环的内部。


continue 在循环中的工作原理

continue 的行为取决于它所在的循环类型:

for 循环中

continuefor 循环中执行时,程序会:

  1. 立即跳过 for 循环体中 continue 之后的所有剩余代码。
  2. 直接执行 for 循环的 增量表达式 (i++)。
  3. 然后执行 条件判断 (i < 10)。
  4. 如果条件为真,则开始下一次循环;如果为假,则循环结束。
// 示例:打印 1 到 10,但跳过 5
#include <stdio.h>
int main() {
    for (int i = 1; i <= 10; i++) {
        if (i == 5) {
            printf("跳过数字 5\n");
            continue; // 跳过本次循环的剩余部分,直接执行 i++
        }
        printf("i = %d\n", i);
    }
    return 0;
}

输出:

i = 1
i = 2
i = 3
i = 4
跳过数字 5
i = 6
i = 7
i = 8
i = 9
i = 10

whiledo-while 循环中

continuewhiledo-while 循环中执行时,程序会:

  1. 立即跳过循环体中 continue 之后的所有剩余代码。
  2. 直接跳转到循环的条件判断部分,进行下一次循环的判断。

特别注意:在 whiledo-while 循环中,continue 不会自动更新循环变量,如果你在 continue 之前没有更新循环变量,可能会导致无限循环

// 示例:while 循环中使用 continue
#include <stdio.h>
int main() {
    int i = 0;
    while (i < 5) {
        if (i == 2) {
            printf("跳过 i = 2,注意 i 没有被更新!\n");
            i++; // 必须手动更新,否则会无限循环
            continue;
        }
        printf("i = %d\n", i);
        i++;
    }
    return 0;
}

输出:

i = 0
i = 1
跳过 i = 2,注意 i 没有被更新!
i = 3
i = 4

如果去掉 if (i == 2) 代码块里的 i++,程序在 i 等于 2 时会一直 continue,永远无法进入下一次循环判断,导致死循环。


if + continue 的常见用法

ifcontinue 结合起来是循环中最常见的模式之一,主要用于过滤跳过某些不符合条件的元素。

示例1:处理数组,跳过负数

假设我们有一个整数数组,我们想计算所有正数的和。

#include <stdio.h>
int main() {
    int numbers[] = {10, -5, 20, -8, 15, 0};
    int sum = 0;
    int size = sizeof(numbers) / sizeof(numbers[0]);
    for (int i = 0; i < size; i++) {
        // 如果数字小于等于0,就跳过本次循环
        if (numbers[i] <= 0) {
            continue;
        }
        // 只有当数字大于0时,这里的代码才会被执行
        sum += numbers[i];
        printf("累加了 %d, 当前和为: %d\n", numbers[i], sum);
    }
    printf("\n最终所有正数的和为: %d\n", sum);
    return 0;
}

输出:

累加了 10, 当前和为: 10
累加了 20, 当前和为: 30
累加了 15, 当前和为: 45
最终所有正数的和为: 45

在这个例子中,if (numbers[i] <= 0) 判断了元素是否需要被过滤掉,如果是,continue 就会跳过 sum += numbers[i] 这行累加代码,直接进入下一次循环。

示例2:检查奇偶性

打印 1 到 10 之间的所有偶数。

#include <stdio.h>
int main() {
    for (int i = 1; i <= 10; i++) {
        // i 是奇数,就跳过
        if (i % 2 != 0) {
            continue;
        }
        // 只有偶数才会被打印
        printf("%d 是偶数\n", i);
    }
    return 0;
}

输出:

2 是偶数
4 是偶数
6 是偶数
8 是偶数
10 是偶数

continuebreak 的关键区别

初学者经常混淆 continuebreak,它们都是循环内的跳转语句,但作用完全不同:

特性 continue break
作用 跳过本次循环,继续下一次循环。 完全终止整个当前循环。
位置 只能在循环内部。 可以在循环或 switch 语句内部。
比喻 “这个不符合要求,我不处理它了,看看下一个。” “这个循环我已经处理完了,不玩了,直接退出。”

break 示例:

for (int i = 1; i <= 5; i++) {
    if (i == 3) {
        break; // 当 i 等于 3 时,整个 for 循环直接结束
    }
    printf("i = %d\n", i);
}
// 输出:
// i = 1
// i = 2
// 循环在 i=3 时被 break 终止,i=4 和 i=5 不会被执行

  1. if 是判断if (条件) 决定一段代码是否执行。
  2. continue 是跳转:只能在循环内使用,作用是跳过当前循环的剩余部分,直接进入下一次循环。
  3. if + continue 是过滤:这是最常见的组合。if 用来判断是否需要“过滤”当前元素,如果需要,就执行 continue 来跳过处理该元素的代码。
  4. 注意 continuewhile 循环中的陷阱:记得手动更新循环变量,否则可能导致无限循环。
  5. continue vs breakcontinue 是“跳过一次”,break 是“彻底退出”。
-- 展开阅读全文 --
头像
dede if include标签如何正确使用?
« 上一篇 01-10
织梦 正则表达式 替换
下一篇 » 01-10

相关文章

取消
微信二维码
支付宝二维码

目录[+]