C语言goto的应用举例以及详解

目录
  • 一、goto语句的简单解释
  • 二、goto语句简单引用举例
  • 三、goto语句的实际引用场景
  • 总结

一、goto语句的简单解释

goto语句其实就是一个跳转语句。C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。 从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过 程。 例如:一次跳出两层或多层循环。 多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。

二、goto语句简单引用举例

下面我们来简单的写一个有趣的关机小程序。在这个小程序中我们应用到goto语句试一下。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
	char arr[20] = { 0 };
	system("shutdown -s -t 60");
again:
	printf("请注意,你的电脑将会在60秒后自动关机。如果你输入:我是猪,会自动取消关机。\n");
	scanf("%s", arr);
	if (strcmp(arr, "我是猪") == 0)
		system("shutdown -a");
	else
		goto again;
	return 0;
}

但是上面的代码我们同样可以不用goto语句来实现,代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
	char arr[20] = { 0 };
	system("shutdown -s -t 60");
	while (1)
	{
		printf("请注意,你的电脑将会在60秒后自动关机。如果你输入:我是猪,会自动取消关机。\n");
		scanf("%s", arr);
		if (strcmp(arr, "我是猪") == 0)
		{
			printf("小乖乖,这就取消关机\n");
			system("shutdown -a");
			break;
		}
	}
    return ;
}

这也就是我们说goto语句理论上是可以不存在的,没有必要的。一般不用goto语句也可以很容易写出代码。

三、goto语句的实际引用场景

for(...)
    for(...)
   {
        for(...)
       {
            if(disaster)
                goto error;
       }
   }
    …
error:
  ...

从上我们可以看出,goto语句真正适合的引用场景其实就是:当我们写了很多for循环时,我们需要写很多个break来跳出来for循环时,我们可以直接用goto语句来跳出for循环。

综上,我们需要了解goto语句就行,但是goto语句的应用场景不是很多,提及的时候我们还是要会运用。

总结

到此这篇关于C语言goto的应用举例以详解的文章就介绍到这了,更多相关C语言goto应用举例内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C语言goto语句简单使用详解

    简单介绍 C语言中提供了可以随意滥用的 goto语句和标记跳转的标号.从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码.但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程,例如一次跳出两层或多层循环.这种情况使用break是达不到目的的.它只能从最内层循环退出到上一层的循环. 语法 C 语言中 goto 语句的语法: goto label; .. . label: statement; 示例对比 #include<std

  • C语言详细分析讲解关键字goto与void的作用

    目录 一.关于goto 二.void 的意义 三.小结 一.关于goto 高手潜规则:禁用 goto 项目经验:程序质量与 goto 的出现次数成反比 最后的判决:将 goto 打入冷宫 下面看一段 goto 副作用分析的代码: #include <stdio.h> #include <malloc.h> void func(int n) { int* p = NULL; if( n < 0 ) { goto STATUS; } p = (int*)malloc(sizeof

  • C语言goto的应用举例以及详解

    目录 一.goto语句的简单解释 二.goto语句简单引用举例 三.goto语句的实际引用场景 总结 一.goto语句的简单解释 goto语句其实就是一个跳转语句.C语言中提供了可以随意滥用的 goto语句和标记跳转的标号. 从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码.但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过 程. 例如:一次跳出两层或多层循环. 多层循环这种情况使用break是达不到目的的.它只能从最内层

  • C语言中的正则表达式使用示例详解

    正则表达式,又称正规表示法.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE).正则表达式是使用单个字符串来描述.匹配一系列符合某个句法规则的字符串. 在c语言中,用regcomp.regexec.regfree 和regerror处理正则表达式.处理正则表达式分三步: 编译正则表达式,regcomp: 匹配正则表达式,regexec: 释放正则表达式,regfree. 函数原型 /* 函数说明:Regcomp将正则表达式字符串regex编译

  • 对Python3 goto 语句的使用方法详解

    熟悉 C 语言的小伙伴一定对 goto 语句不陌生,它可以在代码之间随意的跳来跳去,但是好多老鸟都告诫大家,不要使用 goto,因为 goto 会使你的代码逻辑变的极其混乱. 但是有时候我们不得不用它,因为它太高效了.比如进入循环内部深层一个 goto 就能回到最上层,还有可以定位到代码的任意一个位置,很是高效方便. 但是也不要所有的代码都用 goto,那样你的代码就变得像量子世界那样诡异,连你自己都控制不了. 最后一句忠告,能不用 goto 最好就不用. 首先安装一个 goto 的包(因为官方

  • C语言fgetc和fputc函数用法详解(以字符形式读写文件)

    在C语言中,读写文件比较灵活,既可以每次读写一个字符,也可以读写一个字符串,甚至是任意字节的数据(数据块).本节介绍以字符形式读写文件. 以字符形式读写文件时,每次可以从文件中读取一个字符,或者向文件中写入一个字符.主要使用两个函数,分别是 fgetc() 和 fputc(). 字符读取函数 fgetc fgetc 是 file get char 的缩写,意思是从指定的文件中读取一个字符.fgetc() 的用法为: int fgetc (FILE *fp); fp 为文件指针.fgetc() 读

  • Go语言学习之循环语句使用详解

    目录 1.for循环 2.for-each语法 3.break的使用 4.continue的使用 5.goto的使用 1.for循环 写法基本和其他语言一致,只是没有了while循环,用for代替while. 样例代码如下 // for循环 func loop1() { sum := 0 for i := 0; i < 100; i++ { sum += i } fmt.Printf("sum = %d\n", sum) // 和while循环一样 sum1 := 3 for s

  • Go语言实现控制台输入&生成随机数详解

    1. 不同基础类型之间的转化 对于不同的基础类型之间的转化,Go 提供了 strconv包.它实现了字符串与其他基本数据类型之间的转化. 其中最常用的数值转化函数是Atoi和ltoa Atoi 方法可以将字符串类型的数值直接转化为int类型的数值,而 ltoa 可以将 int 类型的数值转化为string类型的值. 示例:控制台输入一个数值,进行数据大小的比较 package main import ( "fmt" "strconv" ) func main() {

  • Go语言实战学习之流程控制详解

    目录 1. 前言 2. if分支 3. for及for-range循环 4. switch-case-fallthrough分支 5. goto 6. break和continue 7. 跳出嵌套循环 8. 最后 1. 前言 这里还是再总结一下流程控制,和其它语言相比做了一些优化,比如相比c增加了迭代器类型的for循环,switch针对c中容易出问题的地方做了一些修改,避免出现缺少break时存在的常见问题,此外,和Java类似也存在跳出循环和多层嵌套的方法,C中容易造成使用不当的goto也同样

  • C语言树状数组的实例详解

    C语言树状数组的实例详解 最近学了树状数组,给我的感觉就是 这个数据结构好神奇啊^_^ 首先她的常数比线段树小,其次她的实现复杂度也远低于线段树 (并没有黑线段树的意思=-=) 所以熟练掌握她是非常有必要的.. 关于树状数组的基础知识与原理网上一搜一大堆,我就不赘述了,就谈一些树状数组的应用好了 1,单点修改,求区间和 #define lowbit(x) (x&-x) // 设 x 的末尾零的个数为 y , 则 lowbit(x) == 2^y void Update(int i,int v)

  • Kotlin 语言中调用 JavaScript 方法实例详解

    Kotlin 语言中调用 JavaScript 方法实例详解 Kotlin 已被设计为能够与 Java 平台轻松互操作.它将 Java 类视为 Kotlin 类,并且 Java 也将 Kotlin 类视为 Java 类.但是,JavaScript 是一种动态类型语言,这意味着它不会在编译期检查类型.你可以通过动态类型在 Kotlin 中自由地与 JavaScript 交流,但是如果你想要 Kotlin 类型系统的全部威力 ,你可以为 JavaScript 库创建 Kotlin 头文件. 内联 J

  • C语言中联合体union的实例详解

     C语言中联合体union的实例详解 1.定义: union(int i, short s, char c) un; un.i = 3; printf("i=%d",un.i); printf("length = %d\n",sizeof(un);//==4,有最大的变量来决定 2.相当与java里的List T类型 3.数据交换 void swap(int *p , int *q){ int temp = *p; *p = *q; *q = temp; } 4.打

随机推荐