1、C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。
goto语句为无条件转向语句,他的一般形式为:
goto 语句标号;
语句标号:用标识符表示,
标识符:由下划线、字母、数字组成,注:不能用数字开头
但是一般不建议使用goto语句,因为它的用法不符合结构化原则,只有在不得已(例如能大大提高效率)时使用。
从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。
2、goto语句的一般有两个用法:
1.与if语句一起构成循环结构
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//代码1
int main()
{
char input[10] = { 0 };//输入的字符串
system("shutdown -s -t 60");//system是一个库函数,可以执行系统命令,
again:
printf("请注意你的电脑一分钟内关机,如果输入:我是猪,就取消关机\n");
scanf("%s", input);//数组本身就是地址
if (0 == strcmp(input, "我是猪"))//strcmp判断两个字符串是否相等,注:不能直接使用==
{
system("shutdown -a");//取消关机
}
else
{
printf("输入错误,你不乖!\n");
goto again;
}
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char input[10] = { 0 };
system("shutdown -s -t 60");
printf("请注意你的电脑一分钟内关机,如果输入:我是猪,就取消关机\n");
while (1)
{
scanf("%s", input);//数组本身就是地址
if (0 == strcmp(input, "我是猪"))//strcmp判断两个字符串是否相等,注:不能直接使用==
{
printf("小乖乖,这就取消关机\n");
system("shutdown -a");//取消关机
break;
}
else
{
printf("输入错误,你不乖!\n");
}
}
return 0;
}
代码1和代码2是一样的,运行结果
有兴趣的可以搜索shutdown 百度一下。
2.从循环体中跳转到循环体外,但在C语言中使用break语句和continue语句也可跳出本层循环和结束本次循环。
最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。例如:一次跳出两层或多层循环。多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。注:break一次只能跳出一层循环
for(...)for(...){for(...){if(disaster)goto error;}}…error:if(disaster)// 处理错误情况