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 ) // 处理错误情况