循环辅助语句
一般而言,程序进入循环后,在下一次循环测试之前会执行完循环体中的所有语句。continue 和 break 语句可以根据循环体中的测试结果来忽略一部分循环内容,甚至结束循环。
break语句
程序执行到循环中的break语句时,会终止包含它的当前循环,并继续执行循环体下面的语句。
一、用法
-
break语句通常用在循环语句,可使程序终止循环而执行循环后面的语句,通常 break语句 总是与 if语句 连在一起,即满足条件时便跳出循环。(可用在死循环中)
-
例
#include <stdio.h> int main( void ) { int i,count = 0; //用于循环结构 for(i=0; i<100; i++) { count += i; if(count>100) //当累加到大于100时,退出循环 { break; } } //while死循环 while(1) { count--; if(count==0) { break; } } //for死循环 for(;;) { count++; if(count==10) { printf("%d",count); break; } } }
-
-
break语句会终结最近的外层循环。
-
例
#include <stdio.h> int main( void ) { int i, j, count = 0, n=100; for(i=0; i<1; i++) { for(j=0; j<5; j++) { while(1) { break; //只退出离它最近的循环,在这里是while循环,继续执行while循环外的代码,即for循环 } printf("a"); } } }
结果 :
-
-
当执行break语句时,会立即退出当前循环,在当前循环体内break后的语句不执行
-
例
#include <stdio.h> int main( void ) { int i, j, count = 0, n=100; for(i=0; i<1; i++) { for(j=0; j<5; j++) //循环5次 { while(1) { if(2>1) { printf("c"); break; printf("x"); } if(2<1) { } else { printf("b"); } } printf("f"); } } }
结果:
-
-
如果一个 for 循环被 break 所终结,该循环的控制变量会保持其当前值。
- 例
结果:#include <stdio.h> int main( void ) { int i, j, count = 0, n=100; for(i=0; i<n; i++) { count++; if(i==4) { break; } } printf("i=%d count=%d",i ,count); }
- 例
-
break语句通常也用在switch语句,让程序离开switch语句,跳至switch语句后面的下一条语句
-
例
#include<stdio.h> int main() { char score = 'C'; switch(score) { case 'A': printf("90分以上\n"); break; case 'B': printf("80到90分\n"); break; case 'C': printf("70到80分\n"); break; case 'D': printf("60到70分\n"); break; case 'E': printf("60分以下\n"); break; default: printf("输入错误\n"); } printf("太棒了!"); return 0; }
结果:
-
continue语句
执行到 contiune语句 时,会跳过本次迭代的剩余部分,强迫开始下一次循环。如果continue语句在嵌套循环内,则只会影响包含该语句的内层循环。
一、用法
- 对于 for 循环,执行continue语句会跳到更新循环控制变量处,然后再进行判断条件,continue 语句执行后自增语句仍然会执行。
-
例
#include<stdio.h> int main() { int i; for(i=1; i<10; i++) { if(i==5) { continue; } printf("%d\n", i); } return 0; }
结果:
-
- 对于while 和 do…while 循环,执行continue 语句,重新执行条件判断。(在continue之前,更新循环变量)
-
例
#include<stdio.h> int main() { int i; while(i<10) { if(i==5) { i++; //注意:需要i++,不然会一直在这里死循环。 continue; } printf("%d\n", i); i++; } return 0; }
结果:
-
- continue语句可用于排除元素
-
例
#include<stdio.h> int main() { int i; while((scanf("%d",&i)) != EOF) { if (i < 0 || i > 9) { continue; //只输出0到9的数,其他数不输出 } printf("%d ", i); } return 0; }
-
二、注意
- continue语句并没有使整个循环终止
- 在while或do-while循环中,continue无法更新循环条件,如果读到continue之前没有更新循环条件,那么continue就会挡住后面的代码,可能使后面的循环更新条件无法执行(如果你的循环更新条件放在后面的话),陷入死循环
goto语句
C 语言中的 goto 语句允许把控制无条件转移到同一函数内的被标记的语句
注意:在任何编程语言中,都不建议使用 goto 语句。因为它使得程序的控制流难以跟踪,使程序难以理解和难以修改。任何使用 goto 语句的程序可以改写成不需要使用 goto 语句的写法。
一、语法
goto label;
...
...
label: statement;
label 可以是任何除 C 关键字以外的纯文本(apple、123),它可以设置在 C 程序中 goto 语句的前面或者后面
-
例
#include<stdio.h> int main() { int i; again: while((scanf("%d",&i)) != EOF) { if (i < 0 || i > 9) { goto again; } printf("%d ", i); } return 0; }
二、适用场景
终止程序在某些深度嵌套的结构的处理过程,例如一次跳出两层或多层循环。(可以用多层break代替)
-
例
for(...) for(...) { for(...) { if(exception) goto error; } } … error: if(exception) // 处理错误情况