goto语句其实在平常中我们 除了学习分支语句和循环语句时,介绍循环语句时,才会知道有goto语句这个用法,那读者可能会问:我们还有学习的必要吗?
答案是显而易见的,正如黑格尔所说的:存在即合理!既然存在,就会有存在的必要!虽然我们现在不会遇到且用到 ,当在搞Linux硬件驱动等的时候,其内核含有较多的goto语句,如果不会且不知道的话,将会导致你无法理解这个的工作原理。因此我们要知道并学会用于它。
一、什么是goto语句
C语言中提供了可以随意滥用的goto语句和标记跳转的标号。从理论上讲,goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。
二、goto语句的作用是什么
goto语句在某些场合下goto语句还是用得着的,最常见的用法是终止程序在某些深度嵌套结构的处理过程。例如,一次跳出多层循环的场景。一次跳出多层循环使用break是比较麻烦的,因为break每次使用只能跳出一层循环,在这里只能用多个break才能实现,goto语句的优势就体现出来了。
三、goto语句的缺点
之所以老师没有多强调它,以及各大教科书几乎都是寥寥数笔,因为它有一个致命的缺点:一旦滥用goto语句将会导致逻辑混乱,导致系统崩溃等问题!!!
四、goto语句的结构与用法
结构:
again:
语句;
goto again;//again可以替换成其他的,这里不要求一定是again
用法:
某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过 程。比如结束多层嵌套的使用。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
for(...)
for(...)
{
for(...)
{
if(disaster)
goto error;
}
}
…
error:
if(disaster)
// 处理错误情况
|
五、goto语句的巧用实例——关机小程序
1、goto语句版关机小程序设计源代码:
goto语句的使用效果其实和我们的循环有异曲同工之妙,goto语句的编写也可以实现循环的效果。对比两个版本的关机小程序设计,你就能深刻感受到啦!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
#define _CRT_SECURE_NO_WARNINGS 1//如果是VS编译器才需要这句代码
#include<stdio.h>
#include<stdlib.h>//shutdown命令语句的头文件
#include<string.h>//strcmp的头文件
int main()
{
char input[20] = { 0 };
system("shutdown -s -t 60");
again:
printf("电脑将在1分钟内关闭,如果输入:我是猪,就取消关机!\n请输入:>");
scanf("%s", input);
//strcmp函数用于比较两个字符串的大小
if (0 == strcmp(input, "我是猪"))
{
system("shutdown -a");
}
else
{
goto again;
}
return 0;
}
|
2、循环语句版关机小程序设计源代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#define _CRT_SECURE_NO_WARNINGS 1//如果是VS编译器才需要这句代码
#include<stdio.h>
#include<stdlib.h>//shutdown命令语句的头文件
#include<string.h>//strcmp的头文件
int main()
{
char input[20] = { 0 };
system("shutdown -s -t 60");
while (1)
{
printf("电脑将在1分钟内关闭,如果输入:我是猪,就取消关机!\n请输入:>");
scanf("%s", input);
if (0 == strcmp(input, "我是猪"))
{
system("shutdown -a");
break;
}
}
return 0;
}
|
3.方法三
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<Windows.h>
int main(void)
{
char input[20] = {0};
system("shutdown -s -t 60");//表示将在60秒后电脑关机
again:
printf("请注意:你的电脑将在60秒后自动关机,如果输入:不要关机,则取消自动关机\n");
scanf("%s", input);
if (strcmp(input,"不要关机") == 0)
{
system("shutdown -a");
}
else
goto again;
return 0;
}
|
效果图
总结撒花
上述就是我今天分享的主要内容啦,你学会了吗?但是,不要学会了这个小程序后去恶搞别人的电脑哇(在别人的电脑编写这个程序) ,可以在自己电脑玩玩测试一下就好啦哈哈哈!
|