break 语句
for 或 while 语句的循环体中可以使用 break 语句,其效果是终止本次循环,并将控制跳 出循环语句,转到循环语句的下一条语句。
break 语句经常与一个无穷循环搭配使用,因为按正常途径是跳不出无穷循环的,而用 break 则能以非正常方式跳出循环。例如,我们换一种方法来实现“输入合法性检查”,代码 如下:
这里循环条件是常量 True,它的值是不可能被循环体改变的,即永远为真,所以这是一个无 穷循环①。与前面用后测试循环实现的输入合法性检查代码相比较,可以看到这段代码不需 要人为设置循环的初始条件为 True,因为循环体总是要执行的。这样的代码更加简单直观, 但问题是如何退出无穷循环呢?从上面的代码可见,当用户输入数据不正确,就会不断循环, 要求用户重新输入;当用户确实输入了正数 x,就会执行 break 语句,其作用是跳出循环,控 制转到下一条语句(通常是接着对合法的输入数据 x 进行处理的代码)。
从代码可见,虽然 for 语句本身说的是要罚写 10 遍“烦”字,但循环体中却另有安排:如果 已经抄写了 6 遍(思考:为什么是 6 遍?颠倒循环体中两条语句的顺序又会如何?)“烦”字 后,就不耐烦地跳出了循环。
利用无穷循环和 break 搭配的结构同样可以实现前面介绍的哨兵循环,一般模式如下:
与哨兵循环模式相比较,就能看出这种模式不需要循环之前的前导输入,但在循环体中必须 用 break 才能退出循环。
for 或 while 语句的循环体中还可以使用 continue 语句,其作用是终止本次循环,并将控 制转到循环语句的开始处,“继续”执行下一次循环。
对 break 与 continue 语句进行比较,可知两者都终止执行当前循环,但接着 break 会跳出 循环语句,而 continue 则继续下一次循环。
看一个简单例子:对数据列表中的奇数求和。算法很简单,只需逐个检查列表中的数据, 如果是奇数就加到总和上,如果是偶数就忽略之,直接去检查下一个数据。代码如下:
要说明的是,break 和 continue 语句导致循环结构有多个出口,这不符合结构化编程的基 本思想。虽然使用它们没什么大问题,但仍然建议读者尽量避免使用,尤其是不宜在一个循 环体中使用多个 break 或 continue 语句。关于结构化编程,详见 3.5 节。