前言
goto表示“无条件跳转”,遇到goto直接跳到对应位置的代码。C语言中提供了可以随意滥用的goto语句和标记跳转的标号,从理论上goto语句是没有必要的,事件中没有goto语句也可以很容易地写出代码。但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程,例如一次跳出两层或多层循环。这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。汇编语言里面主要在使用goto这类的代码。另外,goto语句非常不建议使用,会对代码的可读性、可维护性造成毁灭性的打击。
一、使用goto语句的一个例子
一个关机程序:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main() {
char input[10] = { 0 };
system("shutdown -s -t 60");//-s表示关机,-t表示什么时候关机
again:
printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");
scanf("%s", input);
if (strcmp(input, "我是猪")==0)
{
system("shutdown -a");
}
else {
goto again;//again是一个标签,就表示一个代码的位置
}
system("pause");
return 0;
}
二、也可以使用循环
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main() {
char input[10] = { 0 };
system("shutdown -s -t 60");
printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");
scanf("%s", input);
while (1) {
if (strcmp(input, "我是猪") == 0) {
system("shutdown -a");
break;
}
}
system("pause");
return 0;
}
总结
goto真正适合的场景,就是在C中模拟实现异常机制。