其他控制语句

一、概述

除了选择语句和循环语句外,C++ 还提供了几种可以改变程序正常执行流程的控制语句:break、continue 和 goto。合理使用这些语句可以更灵活地控制程序的执行路径。

二、break 语句

作用

break 语句用于中断当前所在的循环(while、do…while、for)或 switch 语句,程序跳转到该循环或 switch 之后的下一条语句继续执行。

语法
break;Code language: JavaScript (javascript)
执行效果

当 break 被执行时,整个循环立即终止,不再进行条件判断,也不再执行循环体中 break 之后的语句。

示例
for (int i = 0; i < 100; i++)
{
    if (i % 6 == 0 && i % 9 != 0)
    {
        cout << i << " ";
        // break;   // 如果取消注释,找到第一个满足条件的数后循环立即终止
    }
}Code language: JavaScript (javascript)

分析:如果不加 break,程序会输出所有满足条件的数。如果取消 break 注释,则找到第一个满足条件的数(i = 6)后循环立即结束,只输出 6。

三、continue 语句

作用

continue 语句用于中断本次循环的剩余操作,直接进入下一次循环的条件判断。在 while 和 do…while 中,跳转到条件判断;在 for 中,跳转到表达式 2(更新语句)然后判断表达式 1。

语法
continue;Code language: JavaScript (javascript)
执行效果

当 continue 被执行时,循环体中 continue 之后的语句被跳过,但循环本身并未终止,而是进入下一轮迭代。

示例
for (int i = 0; i < 100; i++)
{
    if (i % 6 == 0 && i % 9 != 0)
    {
        if (i == 48)
        {
            continue;   // 如果 i 是 48,跳过本次循环剩余部分
        }
        cout << i << " ";
    }
}Code language: JavaScript (javascript)

分析:当 i = 48 时,continue 被执行,cout 语句被跳过,因此 48 不会被输出。其余满足条件的数正常输出。

四、goto 语句

作用

goto 语句为无条件跳转语句,使程序跳转到指定标号的语句处继续执行。

语法
goto 标号名;
...
标号名:
    语句Code language: PHP (php)
执行效果

程序执行到 goto 时,立即跳转到标号所在的位置继续执行。标号的作用域为当前函数内。

示例
cout << "1\n";
cout << "2\n";
difang:
cout << "3\n";
goto difang;
cout << "4\n";
cout << "5\n";
cout << "6\n";
cout << "7\n";
cout << "8\n";Code language: PHP (php)

分析:程序先输出 1 和 2,然后执行到标号 difang: 处输出 3,接着 goto difang; 跳回标号处,再次输出 3,如此反复形成无限循环。标号后面的 4、5、6、7、8 永远不会被执行。

五、代码示例

以下代码演示了三种控制语句的综合用法:

#include <iostream>
using namespace std;

int main()
{
    // 示例1:break 在 for 循环中
    cout << "break 示例(找第一个能被7整除的数):" << endl;
    for (int i = 1; i <= 100; i++)
    {
        if (i % 7 == 0)
        {
            cout << "找到:" << i << endl;
            break;   // 找到后立即终止循环
        }
    }

    // 示例2:break 在 while 循环中(输入验证)
    cout << "\nbreak 示例(输入0退出):" << endl;
    int input;
    while (true)
    {
        cin >> input;
        if (input == 0)
            break;   // 输入0时终止循环
        cout << "你输入了:" << input << endl;
    }

    // 示例3:continue 跳过特定值
    cout << "\ncontinue 示例(输出1~20中跳过5的倍数):" << endl;
    for (int i = 1; i <= 20; i++)
    {
        if (i % 5 == 0)
            continue;   // 跳过5的倍数
        cout << i << " ";
    }
    cout << endl;

    // 示例4:continue 在 while 中
    cout << "\ncontinue 示例(只输出正数):" << endl;
    int arr[] = { 3, -1, 5, 0, -7, 8 };
    int idx = 0;
    while (idx < 6)
    {
        if (arr[idx] <= 0)
        {
            idx++;
            continue;   // 跳过非正数
        }
        cout << arr[idx] << " ";
        idx++;
    }
    cout << endl;

    // 示例5:goto 示例(不推荐,仅演示)
    cout << "\ngoto 示例:" << endl;
    int count = 0;
loop:
    cout << "count = " << count << endl;
    count++;
    if (count < 3)
        goto loop;   // 跳回标号处
    cout << "goto 结束" << endl;

    // 示例6:break 在嵌套循环中(只跳出内层循环)
    cout << "\nbreak 在嵌套循环中:" << endl;
    for (int i = 1; i <= 3; i++)
    {
        for (int j = 1; j <= 5; j++)
        {
            if (j == 3)
                break;   // 只跳出内层 for 循环
            cout << "i=" << i << " j=" << j << "  ";
        }
        cout << endl;
    }

    return 0;
}Code language: PHP (php)

六、注意事项

  • break 只能跳出当前所在的最内层循环或 switch 语句。在嵌套循环中,break 只终止内层循环,外层循环不受影响。
  • continue 只影响当前所在的最内层循环,不影响外层循环。
  • break 和 continue 只能用在循环语句和 switch 语句中,不能在其他地方使用。
  • goto 语句可以跳转到函数内的任意标号处,但会破坏程序的结构化流程,使代码难以阅读和维护。建议尽量避免使用 goto。
  • goto 不能跳过变量的初始化语句跳入其作用域,否则可能导致未定义行为。
  • 在嵌套循环中,如果需要从深层循环直接跳出多层,可以考虑将循环提取为函数并使用 return 替代 goto。

七、break、continue 与 goto 的对比

语句作用范围跳转目标使用建议
break最内层循环或 switch循环或 switch 后的第一条语句合理使用,提高代码效率
continue最内层循环下一次循环的条件判断处合理使用,简化条件逻辑
goto当前函数内任意标号标号所在位置尽量避免,破坏结构化设计

八、小结

  • break 用于立即终止当前循环或 switch,跳转到结构之后的语句。
  • continue 用于跳过本次循环剩余部分,直接进入下一次循环判断。
  • goto 为无条件跳转语句,跳转到函数内指定标号处,不推荐使用。
  • break 和 continue 是结构化控制语句,在循环中合理使用可以提高代码清晰度和效率。
  • goto 会破坏程序结构,应尽量避免,仅在特殊情况下(如深层嵌套中快速退出)谨慎使用。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注