5.3.3 break语句和continue语句
前面在讲解switch语句时讲过break语句,那时的break语句用于跳出整个switch语句并继续执行switch语句的下一条语句。
同时,break语句还可以用在三种循环语句while、do…while、for的语句体(循环体)中,用于跳出循环体,也就是提前结束循环,接着执行循环后面的语句。
通过前面的范例代码已经知道,从1加到100的和值是5050,现在再看一例,依旧是计算从1加到100的和值,但增加一个新需求:当和值达到4000时,就退出循环。看看如何用break语句实现:

切记:break语句不能用于循环语句和switch语句之外的任何其他语句中,并且break语句出现在switch中时,含义是跳出switch语句,而不是跳出循环体,即便在switch语句外面有一个循环语句,也仅仅用于跳出switch语句而不是跳出switch外面的循环语句。
另外,也必须知道,break语句只能跳出break语句所在这层循环。仔细研究一下下面的范例,建议设置断点并对代码进行调试跟踪,以便深刻理解break语句的执行路线:

看看上面的代码,在for(j=1;j<=i;j++)循环体内的break语句,用于跳出forj这个循环,执行这行代码后,程序流程直接跳到“printf("\n");”行继续执行,然后接着又遇到了第二个break语句行,而该break语句所在的循环是for (i=1;i<=9;i++)循环,所以这个break语句执行后,程序流程直接跳到“printf("流程走出来了!\n");”行,那么最终程序的执行结果如图5.6所示,只有两行执行结果。

图5.6 break语句执行结果演示
现在再看看continue语句。continue只用在三种循环语句while、do…while、for的语句体中(刚才讲解break语句时,break语句还可以用在switch语句中,而现在讲解的continue语句不能用于switch语句中,只能用于三种循环语句中)。
continue语句的作用:结束本次循环,跳出循环体中余下的尚未执行的语句,接着进行下一次是否执行循环的判断。
continue语句和break语句的区别是什么呢?continue语句只结束本次循环,而不是结束整个循环的执行,而break语句是结束整个循环的执行,跳到整个循环后面的语句去执行。
图5.7(a)所示是while循环中的break语句执行流程图,图5.7(b)所示是while循环中的continue语句执行流程图,请注意观察和比较。

图5.7 while循环中的break语句和continue语句执行流程图
这里演示一下continue语句,把1到100之间不能被3整除的数输出。演示范例如下:

观察整个程序执行流程:当i能被3整除时,执行continue语句,结束本次循环(跳过了下面的printf语句),只有i不能被3整除时才执行“printf("%d ",i);”语句行。整个程序的执行结果如图5.8所示。

图5.8 输出1到100之间不能被3整除的数