5.7 C语言 改变循环的执行转态(break与continue区别)


5.7.1 C语言 用break语句提前终止循环

在C语言中,break 语句用于立即终止当前循环的执行,跳出循环体,并继续执行循环后面的代码。break 可以用于 forwhiledo-while 循环。

使用场景

  1. 提前退出循环:当在循环中检测到某个条件满足时,你可能不再需要继续执行循环的剩余部分。
  2. 跳出多重嵌套循环:在多层嵌套循环中,break 只能跳出最内层的循环。

示例代码

#include <stdio.h>

int main() {
    int i;

    // for 循环中使用 break
    for (i = 0; i < 10; i++) {
        if (i == 5) {
            break; // 当 i 等于 5 时,跳出循环
        }
        printf("In for loop: %d\n", i);
    }

    printf("Loop exited.\n");

    // while 循环中使用 break
    int j = 0;
    while (j < 10) {
        if (j == 5) {
            break; // 当 j 等于 5 时,跳出循环
        }
        printf("While loop: %d\n", j);
        j++;
    }

    printf("Loop exited.\n");

    // do-while 循环中使用 break
    int k = 0;
    do {
        if (k == 5) {
            break; // 当 k 等于 5 时,跳出循环
        }
        printf("Do-while loop: %d\n", k);
        k++;
    } while (k < 10);

    printf("Loop exited.\n");

    return 0;
}

输出结果

In for loop: 0
In for loop: 1
In for loop: 2
In for loop: 3
In for loop: 4
Loop exited.
While loop: 0
While loop: 1
While loop: 2
While loop: 3
While loop: 4
Loop exited.
Do-while loop: 0
Do-while loop: 1
Do-while loop: 2
Do-while loop: 3
Do-while loop: 4
Loop exited.

注意事项

  1. 避免滥用 break:过度使用 break 可能会使代码难以理解和维护。在可能的情况下,尽量使用循环的自然结束条件。
  2. 多重嵌套循环:在多重嵌套循环中,break 只能跳出最内层的循环。如果你需要跳出外层循环,可能需要使用标签(goto 语句)或者重新设计循环结构。

使用标签跳出多层循环

在C语言中,可以使用标签(label)和 goto 语句来跳出多层嵌套循环,但这种做法通常不推荐,因为它可能导致代码难以理解和维护。

#include <stdio.h>

int main() {
    int i, j;

start_over:
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            if (i * j > 2) {
                goto end_loop;
            }
            printf("i = %d, j = %d\n", i, j);
        }
    }

end_loop:
    printf("Exited from nested loops.\n");

    return 0;
}

在这个例子中,当 i * j > 2 时,使用 goto 语句跳出所有循环。但请注意,过度使用 goto 可能会使代码结构混乱,应尽量避免。

5.7.2 用continue语句提前结束本次循环

在C语言中,continue 语句用于跳过当前循环的剩余部分,并立即开始下一次循环的迭代。continue 可以用于 forwhiledo-while 循环。

使用场景

  1. 跳过某些迭代:当你希望在满足某个条件时跳过当前循环的剩余部分,但不终止整个循环。
  2. 忽略无效数据:在处理数据时,如果遇到无效或不需要的数据,可以使用 continue 跳过这些数据的处理。

示例代码

#include <stdio.h>

int main() {
    int i;

    // for 循环中使用 continue
    for (i = 0; i < 10; i++) {
        if (i % 2 == 0) {
            continue; // 如果 i 是偶数,跳过打印
        }
        printf("In for loop: %d\n", i);
    }

    printf("Loop continued.\n");

    // while 循环中使用 continue
    int j = 0;
    while (j < 10) {
        if (j % 2 == 0) {
            continue; // 如果 j 是偶数,跳过打印
        }
        printf("While loop: %d\n", j);
        j++;
    }

    printf("Loop continued.\n");

    // do-while 循环中使用 continue
    int k = 0;
    do {
        if (k % 2 == 0) {
            continue; // 如果 k 是偶数,跳过打印
        }
        printf("Do-while loop: %d\n", k);
        k++;
    } while (k < 10);

    printf("Loop continued.\n");

    return 0;
}

输出结果

In for loop: 1
In for loop: 3
In for loop: 5
In for loop: 7
In for loop: 9
Loop continued.
While loop: 1
While loop: 3
While loop: 5
While loop: 7
While loop: 9
Loop continued.
Do-while loop: 1
Do-while loop: 3
Do-while loop: 5
Do-while loop: 7
Do-while loop: 9
Loop continued.

注意事项

  1. 避免滥用 continue:过度使用 continue 可能会使代码难以理解和维护。在可能的情况下,尽量使用循环的自然结束条件。
  2. break 的区别continue 只是跳过当前迭代的剩余部分,而 break 则是完全终止循环。
  3. 多重嵌套循环continue 只能影响当前最内层的循环,不能跳出外层循环。

使用标签与 continue

虽然 continue 本身不能用于跳出多层循环,但可以通过标签和 continue 的组合来实现类似的效果,但这种做法通常不推荐,因为它可能导致代码难以理解和维护。

#include <stdio.h>

int main() {
    int i, j;

outer_loop:
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            if (i * j > 2) {
                continue outer_loop; // 跳过当前迭代,开始下一次外层循环
            }
            printf("i = %d, j = %d\n", i, j);
        }
    }

    printf("Continued to next outer loop iteration.\n");

    return 0;
}

在这个例子中,使用了标签 outer_loopcontinue 来跳过当前迭代并开始下一次外层循环的迭代。但请注意,过度使用标签和 goto 可能会使代码结构混乱,应尽量避免。

5.7.3 break语句和continue语句的区别

break 语句和 continue 语句在C语言中都是控制循环流程的关键字,但它们的作用和使用场景有所不同:

break 语句

  • 作用:终止当前循环的执行,即跳出整个循环体,不再执行循环体中的剩余代码,直接跳出到循环后面的代码执行。
  • 使用场景
    • 当满足某个条件时,不再需要继续执行循环。
    • 用于提前退出循环,特别是在多重嵌套循环中,可以配合标签使用来跳出特定的循环层级。

continue 语句

  • 作用:跳过当前循环的剩余部分,直接进行下一次循环的迭代。
  • 使用场景
    • 当满足某个条件时,不想执行循环体中的剩余代码,但希望继续执行后续的循环迭代。
    • 用于跳过某些特定的迭代,而不是终止整个循环。

区别

  1. 控制范围

    • break 终止整个循环。
    • continue 跳过当前迭代,继续执行后续的迭代。
  2. 执行流程

    • 使用 break 后,将不再执行循环体中的任何代码,直接跳出循环。
    • 使用 continue 后,将跳过当前迭代中 continue 语句之后的所有代码,直接进行循环条件的判断,准备下一次迭代。
  3. 使用目的

    • break 用于完全退出循环。
    • continue 用于跳过当前迭代中剩余的部分。

示例

下面是一个示例,展示了 breakcontinue 的区别:

#include <stdio.h>

int main() {
    // 使用 break
    for (int i = 0; i < 10; i++) {
        if (i == 5) {
            break; // 当 i 等于 5 时,跳出循环
        }
        printf("With break: %d\n", i);
    }

    // 使用 continue
    for (int j = 0; j < 10; j++) {
        if (j % 2 == 0) {
            continue; // 如果 j 是偶数,跳过打印
        }
        printf("With continue: %d\n", j);
    }

    return 0;
}

输出结果

With break: 0
With break: 1
With break: 2
With break: 3
With break: 4
With continue: 1
With continue: 3
With continue: 5
With continue: 7
With continue: 9

在这个示例中:

  • 使用 break 时,当 i 等于 5 时,循环完全终止。
  • 使用 continue 时,跳过了所有偶数的打印,只打印了奇数。

通过这个示例,你可以看到 breakcontinue 在实际使用中的不同效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值