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

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

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;
}