一、程序描述
goto语句可以简单理解为“无条件“”转移语句(无视任何情况),在C语言中可以随意滥用goto语句和标记跳转的标号。虽然从理论上说goto语句是没有必要的,没有它也可以写出程序,但是在某些场景下goto语句非常好用,可以终止程序在某些深度嵌套的结构处理过程,可以从大量嵌套的语句中直接跳转出来。break只能跳出一层循环,利用goto语句可以跳出多层循环。
但是,goto语句容易造成很多麻烦,容易让代码变得不好理解,产生问题,所以应当慎用。
二、程序要点
1、利用goto语句实现无限循环
不断打印hello world
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
again:
printf("hello world\n");
goto again;
return 0;
}
2、跳过某些语句
不能打印hello china
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
printf("hello world\n");
goto again;
printf("hello china\n");
again:
printf("haha\n");
return 0;
}
3、打破深层嵌套结构
比如这个代码,嵌套了多重for循环,如果在其中出现某种情况,需要直接结束这个嵌套时,就会很麻烦,此时用goto无条件执行跳出就会很方便。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int i;
for (i=0;i<10;i++)
{
for (i = 0; i < 10; i++)
{
for (i = 0; i < 10; i++)
{
for (i = 0; i < 10; i++)
{
printf("hello world\n");
if (i == 6)
goto error;
}
}
}
}
error:
return 0;
}
4、利用goto语句实现关机程序
利用goto语句,如果输入错误可以不断回到输入前
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char input[20] = { 0 };
system("shutdown -s -t 600");
again:
printf("电脑将在10分钟内关机,如果输入:“停止”,就取消关机!\n请输入:>");
scanf("%s", input);
if (0 == strcmp(input, "停止"))
{
system("shutdown -a");
}
else
{
goto again;
}
return 0;
}
5、不使用goto语句实现关机程序
用一个while死循环来不断提示
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char input[20] = { 0 };
system("shutdown -s -t");
while (1)
{
printf("电脑将在10分钟内关机,如果输入:“停止”,就取消关机!\n请输入:>");
scanf("%s", input);
if (0 == strcmp(input, "停止"))
{
system("shutdown -a");
break;
}
}
return 0;
}