在C语言中,continue
和break
是两个常用的控制流语句,它们主要用于改变循环的执行流程。
continue
语句:
continue
语句用于跳过当前循环的剩余部分,并立即开始下一次迭代。它通常用于在循环内部遇到某些条件时,避免执行剩余的循环体代码,并直接开始下一次迭代。
示例:
c复制代码
#include <stdio.h>int main() { int i; for(i = 0; i < 10; i++) { if(i % 2 == 0) { // 如果i是偶数 continue; // 跳过当前循环的剩余部分 } printf("%d ", i); // 只打印奇数 } return 0;}
输出:
复制代码
1 3 5 7 9
在这个例子中,当i
是偶数时,continue
语句会跳过printf
语句,直接开始下一次循环迭代。因此,只有奇数会被打印出来。
2. break
语句:
break
语句用于立即终止当前循环(或switch语句),并跳出循环体。当break
语句执行后,控制流将转移到循环之后的第一个语句。
示例:
c复制代码
#include <stdio.h>int main() { int i; for(i = 0; i < 10; i++) { if(i == 5) { // 如果i等于5 break; // 终止循环 } printf("%d ", i); // 打印i的值,但当i等于5时停止 } return 0;}
输出:
复制代码
0 1 2 3 4
在这个例子中,当i
等于5时,break
语句会终止循环,因此只有0到4(包括4)会被打印出来。
注意:continue
和break
语句只能用在循环体(如for
、while
、do-while
)或switch
语句中。在其他地方使用会导致编译错误。
在复合循环(即嵌套循环)中使用continue
和break
语句时,它们的行为会稍微复杂一些,因为你需要考虑它们对哪个循环的影响。
continue
在复合循环中的用法
在嵌套循环中,continue
语句只会影响它所在的那一层循环。它会使当前迭代的剩余部分被跳过,并立即开始该层循环的下一次迭代。
示例:
c复制代码
#include <stdio.h>int main() { int i, j; for (i = 0; i < 3; i++) { for (j = 0; j < 5; j++) { if (j % 2 == 0) { // 如果j是偶数 continue; // 跳过当前内层循环的剩余部分 } printf("(%d, %d) ", i, j); } printf("\\n"); } return 0;}
输出:
复制代码
(0, 1) (0, 3)(1, 1) (1, 3)(2, 1) (2, 3)
在这个例子中,continue
语句只影响内层循环(由j
控制的循环),使得只有当j
是奇数时,才会打印(i, j)
的值。
break
在复合循环中的用法
在嵌套循环中,break
语句默认只会终止它所在的那一层循环。如果你想要终止所有的嵌套循环,你需要使用额外的逻辑(如设置标志变量)或使用其他控制结构(如goto
,但通常不推荐使用goto
)。
但是,如果你只是想要在最内层循环中使用break
来终止该层循环,那么它的行为很简单。
示例:
c复制代码
#include <stdio.h>int main() { int i, j; for (i = 0; i < 3; i++) { for (j = 0; j < 5; j++) { if (j == 2) { // 如果j等于2 break; // 终止内层循环 } printf("(%d, %d) ", i, j); } if (j == 2) { // 如果内层循环因为j==2而终止 break; // 也可以选择在这里终止外层循环 } printf("\\n"); } return 0;}
输出:
复制代码
(0, 0) (0, 1)
在这个例子中,当j
等于2时,内层循环会被终止,但外层循环会继续。然而,由于我们在内层循环之后检查了j
的值,并使用了另一个break
语句(这是可选的),所以外层循环也被终止了。如果你去掉这个额外的break
语句,外层循环会继续执行,但内层循环将不再执行(因为j
的值已经超过了内层循环的范围)。
注意:在多层嵌套循环中,通常建议避免使用break
来终止外层循环,除非你有明确的理由这样做,因为这可能会使代码更难理解和维护。在这种情况下,使用标志变量或其他控制结构可能是一个更好的选择。