continue在c语言中怎么用(通俗易懂,附实例)

在 C 语言里,continue 是一条“循环控制语句”,它不会终止整个循环,而是立即结束本轮迭代的剩余语句,直接回到循环头部进行下一次条件判断。

形象地说,continue 像“快进键”:本轮还没跑完的代码一律忽略,马上进入下一轮。

与 break 相比,continue 的“杀伤力”更小;break 直接跳出循环,continue 只是“偷懒”本轮。初学者常把两者混淆,记住一个口诀:“break 跳循环,continue 跳本轮”。

continue只能出现在循环体里

语法上,continue 必须位于 for、while 或 do…while 的循环体内,否则编译器报错:

#include <stdio.h>
int main(void)
{
    int a = 3;
    if (a > 2)
        continue;   /* ❌ 编译错误:continue 出现在循环外 */
    return 0;
}

编译提示:error: continue statement not within a loop

continue 在三类循环中的差异

1. while 与 do…while

碰到 continue 后,程序立即跳到循环条件表达式重新求值。

2. for 循环

continue 会先执行表达式3(增量部分),再判断表达式2(循环条件)。

差异代码对比:

/* while 版 */
int i = 0;
while (i < 5) {
    i++;
    if (i == 3) continue;
    printf("%d ", i);   /* 输出 1 2 4 5 */
}

/* for 版 */
for (int i = 0; i < 5; ++i) {
    if (i == 3) continue;
    printf("%d ", i);   /* 输出 0 1 2 4 */
}

continue与if的组合套路

最常见场景:跳过无效数据。

/* 只处理正数,负数直接忽略 */
#include <stdio.h>
int main(void)
{
    int data[8] = {4, -2, 7, 0, 5, -9, 1, 8};
    int sum = 0;
    for (int i = 0; i < 8; ++i) {
        if (data[i] <= 0)      /* 非正数跳过 */
            continue;
        sum += data[i];
        printf("add %d  -> sum=%d\n", data[i], sum);
    }
    printf("total: %d\n", sum);
    return 0;
}

运行结果:

add 4  -> sum=4
add 7  -> sum=11
add 5  -> sum=16
add 1  -> sum=17
add 8  -> sum=25
total: 25

continue 与多层循环:它只影响自己所在的那一层

continue 永远只能跳过直接包裹它的那一层循环。想跨层控制,需要借助其他手段(如标志变量或 goto)。

/* 打印 2×3 矩阵,跳过列号等于行号的元素 */
#include <stdio.h>
int main(void)
{
    for (int i = 0; i < 2; ++i) {
        for (int j = 0; j < 3; ++j) {
            if (i == j) continue;   /* 只跳过内层本轮 */
            printf("(%d,%d) ", i, j);
        }
        putchar('\n');
    }
    return 0;
}

运行结果:

(0,1) (0,2) 
(1,0) (1,2) 

continue 的典型应用场景

  • 过滤非法输入:读字符时跳过空白符。
  • 加速查找:找到目标后跳过剩余处理。
  • 统计有效成绩:跳过负数或大于 100 的异常分值。
/* 例:跳过空白再统计单词 */
#include <stdio.h>
#include <ctype.h>
int main(void)
{
    char txt[] = "  hello   world\n";
    int words = 0, inword = 0;
    for (int i = 0; txt[i] != '\0'; ++i) {
        if (isspace((unsigned char)txt[i])) {
            inword = 0;
            continue;          /* 空白直接下一轮 */
        }
        if (!inword) {         /* 新单词起点 */
            ++words;
            inword = 1;
        }
    }
    printf("words = %d\n", words);   /* 输出 2 */
    return 0;
}

容易踩的坑

1. continue 后面忘记更新变量 → 死循环

int i = 0;
while (i < 5) {
    if (i == 2) continue;   /* i 永远等于 2,死循环 */
    ++i;
}

2. 在 switch 里写 continue

switch 本身不是循环,continue 只能写在 switch 内部的循环体里,否则编译失败。

总结

“continue 跳本轮,break 才跳全身”,记住这句话,continue 就再也不会成为你代码里的“幽灵语句”。

posted @ 2025-11-24 17:23  像风一样的博主  阅读(3)  评论(0)    收藏  举报