一、break语句与continue语句
1.break语句
break语句可用于从for、while、与do-while等循环中提前退出,也可从switch语句中提前退出。break语句能使程序从switch语句或最内层循环中立即跳出。
例1:修改上一博客中的switch语句
/* 测试sbreak语句 */
#include<stdio.h>
int main(int argc, char *argv[])
{
int c;
printf("请输入您想选择的数字:");
scanf("%d", &c);
switch (c)
{
case 0: printf("H\n");break;
case 1: printf("E\n");break;
case 2: printf("LL\n");break;
case 3: printf("O\n");break;
case 4: printf("W\n");break;
case 5: printf("O\n");break;
case 6: printf("R\n");break;
case 7: printf("L\n");break;
default: printf("D\n");break;
}
}
~/test/c.Language --> :./break_test
请输入您想选择的数字:5
O
~/test/c.Language --> :./break_test
请输入您想选择的数字:9
D
执行break语句以后,就会跳出switch语句。
例2:
当我们有break语句时:
/* break语句测试 */
#include<stdio.h>
int main(int argc, char *argv[])
{
int i;
for (i=0; i<10; i++)
{
break;
printf("%d\n", i);
}
return 0;
}
~/test/c.Language --> :./switch_test2
~/test/c.Language --> :
此时将break语句去掉:
/* break语句测试 */
#include<stdio.h>
int main(int argc, char *argv[])
{
int i;
for (i=0; i<10; i++)
{
printf("%d\n", i);
}
return 0;
}
~/test/c.Language --> :./switch_test2
0
1
2
3
4
5
6
7
8
9
2. continue语句
continue语句与break语句是相关联的,但它没有break语句常用。continue语句用于使for、while或do-while语句开始下一次循环的执行。在while与do-while语句中,continue语句的执行意味着立即执行测试部分,在for循环中则意味着使控制转移到递增循环变量部分。continue语句只用于循环语句,不用于switch语句。某个循环包含的switch语句中的continue语句,将导致进入下一次循环。
例:
先测试带有continue的语句
/* 测试continue语句 */
#include<stdio.h>
int main(int argc, char *argv[])
{
int i;
for (i=0; i<10; i++)
{
continue;
printf("OK\n");
}
return 0;
}
~/test/c.Language --> :./continue_test1
~/test/c.Language --> :
此时不输出任何东西。
再将continue去掉
1 /* 测试continue语句 */
2 #include<stdio.h>
3
4 int main(int argc, char *argv[])
5 {
6 int i;
7
8 for (i=0; i<10; i++)
9 {
10 printf("OK\n");
11 }
12
13 return 0;
14 }
~/test/c.Language --> :gcc -o continue_test1 continue_test1.c
~/test/c.Language --> :./continue_test1
OK
OK
OK
OK
OK
OK
OK
OK
OK
OK
当代码中有continue语句时,并不执行后面的printf语句,而是直接返回for循环中执行i++,再执行i<10的判断语句。
二、goto语句与标号
goto语句也称为无条件转移语句,可以跳出多重循环。
标号的命名同变量命名的形式相同,标号后面要紧跟一个冒号。标号可以位于对应的goto语句所在的函数的任何语句的前面。标号的作用是整个函数。
其一般格式如下:
goto 语句标号;
...
...
语句标号: //此时一定要带冒号
其中语句标号是按标识符规定书写的符号, 放在某一语句行的前面,标号后加冒号(:)。语句标号起标识语句的作用,与goto 语句配合使用。
例:
/* 测试goto语句 */
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[])
{
while (1)
{
while (1)
{
goto a; //跳转到a
}
}
a: printf("OK!\n"); //goto语句要跳转的地方
return 0;
}
执行情况如下:
~/test/c.Language --> :gcc -o goto goto.c
~/test/c.Language --> :./goto
OK!
虽然此处使用了两个死循环,但是在遇到goto语句的时候还是可以直接跳出。
【注】
goto语句最常用的用法是终止程序在某些深度嵌套的结构中的处理过程,例如一次跳出两层或多层循环。这种情况下使用break语句是不能达到目的的,它只能从最内层循环退出到上一级的循环。
在大多数情况下,使用goto语句的程序比不适用goto语句的程序段要难以理解和维护,书上建议少使用goto语句。