首页 > 编程笔记 > C++笔记 阅读:208

C++ break和continue的用法(非常详细)

在初步掌握 C++ 循环结构(while、do-while 和 for)用法的基础上,本节带大家掌握 breakcontinue 的用法。

虽然循环通常会按部就班地重复执行,但也可能遇到意外情况,这些情况会打破循环的正常流程。例如:
在这些例子中,“生病”和“年龄超过 50 岁”这两个因素打破了原来的循环,属于循环中的特殊情况。这些特殊情况需要特殊处理:有的需要提前终止循环(例如生病退休),有的需要跳过当前轮次的循环(不增加工资)而开始下一轮次的循环。

为了处理循环中的特殊情况,C++ 提供了两个关键字:break 和 continue。

C++ break语句

在介绍 switch 并列条件选择语句时,我们已经介绍过 break 关键字,它的作用是结束整个 switch 语句。与之类似,当 break 用在循环结构中时,它的作用是结束当前所在的循环语句,继续执行该循环语句之后的下一条语句。

因此,我们可以使用 break 实现因特殊情况而提前结束循环。例如,用 break 来实现因“生病”这一特殊情况而需要“提前退休”(退出循环):
// 是否活着
bool bAlive = true;
// 是否生病
bool bSick = false;

while(bAlive)    // 判断是否活着
{
    if(bSick)    // 判断是否生病
    {
        cout<<"生病了提前退休"<<endl;
        break;    // 因为生病这一特殊情况而提前结束循环
    }
    cout<<"为祖国辛勤工作"<<endl;
    // 改变循环控制条件 bAlive
}
// ...
在执行循环体语句时,首先用 if 条件语句判断是否发生了特殊情况,例如是否生病了。如果发生特殊情况,bSick 的值会变为 true,程序将进入 if 条件语句内部执行。当遇到 break 关键字时,程序执行会跳出当前循环提,即结束当前循环体的执行。

这样,if 条件语句负责判断是否发生了特殊情况,而 break 关键字则负责在特殊情况发生时提前结束循环。两者结合起来,就可以有效地实现因发生特殊情况而需要提前结束循环。

再来看一个实际的例子,以收支统计程序为例,我们可以用 break 关键字将其写成:
int nTotal = 0;
int nInput = 0;
do
{
    cout << "请输入你的收入或支出:";
    cin >> nInput;
    // 对输入的数据进行判断
    // 如果是 0 这种例外情况,表示输入结束,用 break 关键字结束整个循环
    if (0 == nInput)
        break;
    // 正常情况,将输入的收支金额加总,再加到收支总额中
    nTotal += nInput;
} while (true); // 用 true 作为循环条件,表示循环会在内部因特殊情况而提前结束循环
在这里,我们使用 true 作为 do while 循环语句的条件判断语句,但这并不是一个死循环,因为它有结束循环的条件。当用户输入的 nInput 为 0 时,程序会进入 if( 0 == nInput ) 条件语句执行,遇到其中的 break 关键字就会结束整个循环,从而避免成为死循环。

同时,它也表达了对“输入的收支金额为 0”这一特殊情况的处理:结束整个循环。循环语句可以无限地接受用户的输入,但当用户想结束输入时,只需输入满足 0 == nInput 这一特殊情况,即执行 break 语句即可结束整个循环。

C++ continue语句

break 关键字用于在某种条件下结束整个循环,而 continue 关键字则用于在某种条件下结束本轮次循环体的执行(即跳过 continue 关键字之后的本轮次循环体尚未执行的语句),然后直接继续下一轮次的循环,并不会结束整个循环。

如果使用的是 while 或 do while 循环,会直接判断循环条件是否满足以开始下一轮次的循环;如果使用的是 for 循环,则会接着执行更改循环变量的语句,然后判断循环条件是否满足以开始下一轮次的循环。

继续使用前面的收支统计例子,如果用户只想统计大于或等于 10000 元的收入和支出,可以用 continue 关键字将程序改写如下:
// 收支统计程序
int nTotal = 0;
int nInput = 0;
do
{
    cout << "请输入你的收入或支出:";
    cin >> nInput;

    // 如果小于 10000 元,则不用统计在内
    if ((nInput > -10000) && (nInput < 10000))
    {
        continue; // 跳过本轮次循环尚未执行的循环体内的语句,即不进行统计
    }

    // 对输入的收支额度进行统计
    nTotal += nInput;
} while (0 != nInput);
在这个收支统计程序中,当 nInput 接收用户输入的数据后,我们用 if 条件语句判断输入的金额是否小于 10000 元。如果小于 10000 元,则表示该金额不用统计,此时会执行 if 条件语句中的 continue 语句,跳过后面的累加统计语句 nTotal += nInput;,直接跳转到条件表达式 0 != nInput 的计算,以判断是否需要开始执行下一轮次的循环。这样,就有效地处理了对“收支额度小于 10000”这类情况的特殊处理:结束本次轮次的循环,不将该金额统计在内。

总结来说,break 和 continue 常常和条件判断语句一起使用。条件判断语句负责判断是否出现特定情况,而 break 和 continue 则用于处理特定情况:break 用于跳出当前循环语句的整个循环,即立刻结束当前循环控制语句;而 continue 只跳出本轮次的循环,直接准备开始执行下一轮次的循环。

下图展示了 break 和 continue 之间的区别:


图 1 break和continue之间的区别

相关文章