qq_41340164 2023-04-17 16:52 采纳率: 100%
浏览 29
已结题

如何使用goto语句,以及它的作用是什么

使用goto语句是不是只是对代码顺序的一个跳转,而没有对代码内容产生实质影响?

  • 写回答

2条回答 默认 最新

  • Williamtym 2023-04-17 16:56
    关注

    goto语句

    目录

    • goto语句
    • goto语句的定义
    • 避免使用goto
    • goto语句应用

    goto语句的定义

    ​ 早期版本的BASIC和FORTRAN所依赖的goto语句,在C语言中仍旧适用。但是C和其他的两种语言不同,没有goto语句,C程序能更好的执行。Kernighan和Ritchie提到goto语句易被滥用,并建议谨慎使用或者不用。接下来相应介绍goto语句。

    ​ goto语句由两部分:goto和标签名。标签名遵循变量命名规则:goto part1;

    ​ 要让这条语句正常运行,函数必须如下形式:

    ​ part2: printf("Refined analysis:");

    避免使用goto

    ​ 原则上,根本不用在C语言程序中使用goto语句。但是这个语句在FORTRAN或者BASIC中是必不可少的。按照书本要求来写的话,在此之前列举一些使用goto的常见情况,然后再介绍C的解决方案。

    if (size > 12)
        goto a;
        goto b;
    a:cost = cost * 1.05;
    flag = 2;
    b:bill = cost * flag;
    

    ​ 对于以前的BASIC和FORTRAN,只有直接跟在if条件后面的一条语句才属于if,不能不能使用块或复合语句。

    if (size > 12)
    {
        cost = cost * 1.05;
        flag = 2;
    }
    bill = cost * flag;
    

    ​ 实际上,continue和break是goto语句的一个延伸,而且好处是名称已经表明他们的用法了,不需要再使用标签进行说明的。而且,goto语句会打乱原来代码的运行顺序,从而导致代码无法得到我们想要的结果,所以要少用,或者不用。

    goto语句应用

    ​ 当然可以向鹏哥学习

    ​ 用goto语句写一个应用代码,如下:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    int main()
    {
        char input[20] = { 0 };
        system("shutdown -s -t 60");
    again:
        printf("Please note that your PC will shut down in 60 seconds\n");
        printf("If you enter:我是小猪.Cancel the shutdown\n");
        scanf("%s",input);
        if(strcmp(input, "我是小猪") == 0)
        {
            system("shutdown -a");
        }
        else
        {
            goto again;
        }
        return 0;
    }
    

    ​ 注意goto语句只能在一个函数范围内跳转,不能跨函数。可以测试:

    #include<stdio.h>
    void test()
    {
        flag:
        printf("test\n");
    }
    int main()
    {
        goto flag;//这里就会红色报错,显示标签flag未定义;
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月26日
  • 已采纳回答 4月18日
  • 创建了问题 4月17日

悬赏问题

  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了