如何理解goto语句

一、程序描述
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;
}
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值