C语言goto语句简单使用

2023-05-16

简单介绍

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

示例对比

#include<stdio.h>

int main() {
	int c = 1;
	if (c) {
		goto start;
	}

start:
	printf("实例1\n");
	printf("实例2\n");
	printf("实例3\n");
	printf("实例4\n");
	printf("实例5\n");
}

输出结果:
在这里插入图片描述

#include<stdio.h>

int main() {
	int c = 1;
	if (c) {
		goto start;
	}


	printf("实例1\n");
	printf("实例2\n");
	printf("实例3\n");
start:	
	printf("实例4\n");
	printf("实例5\n");
}

输出结果:
在这里插入图片描述
下面是使用goto语句的一个例子:

关机程序

#include <stdio.h>
int main()
{
  char input[10] = {0};
  system("shutdown -s -t 60");
again:
  printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");
  scanf("%s", input);
  if(0 == strcmp(input, "我是猪"))
 {
    system("shutdown -a");
 }
 else
 {
    goto again;
 }
  return 0;
  }

而如果不适用goto语句,则可以使用循环:

#include <stdio.h>
#include <stdlib.h>
int main()
{
  char input[10] = {0};
  system("shutdown -s -t 60");
  while(1)
 {
    printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");
    scanf("%s", input);
    if(0 == strcmp(input, "我是猪"))
   {
      system("shutdown -a");
      break;
   }
 }
  return 0;
}

goto语言真正适合的场景如下:

for(...)
  for(...)
 {
    for(...)
   {
      if(disaster)
        goto error;
   }
 }
  …
error:
if(disaster)
    // 处理错误情况

在这里可以代替多次 break 的跳出

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言goto语句简单使用 的相关文章

  • goto语句实现关机小程序

    C语言中提供了可以随意滥用的 goto语句和标记跳转的标号 从理论上 goto语句是没有必要的 xff0c 实践中没有goto语句也可以很容易的写出代码 而goto语句无非就是直接跳到符号那里去 xff0c 这个符号不固定 xff0c 可以
  • 与调用函数相比,goto 语句是否高效? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我这里有以下 C 代码 i
  • 转到 C 中的特定地址

    如何 JMP 到 C 中的特定地址 我想用 goto 0x10080000 这不起作用 还有其他方法可以更改程序计数器的地址吗 You can cast函数指针的地址 然后跳转到 void void 0x10008000 为了更清楚一点 t
  • 我们真的可以在所有情况下都避免 goto 吗?

    Fortran 90 及更高版本强烈建议不要使用goto陈述 然而 我仍然觉得被迫在以下两种情况下使用它 Case 1 指示重新输入输入值 例如 program reenter 10 print Enter a positive numbe
  • 我的 goto 重定向不起作用,但可以与 echo 一起使用

    echo off start1 set p input action for f tokens 1 2 delims a in input do goto a b gt nul 2 gt 1 goto start1 如果我输入 echo y
  • C#.NET 中的 GOTO 语句

    try block catch GOTO block finally 在这种情况下 goto 会执行吗 它不会编译 因为 GOTO block 代替 goto block 即使它是正确的 它也不会编译 因为 C 规范指出 第 8 9 3 节
  • 继续认为有害? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 处理 EINTR(使用 goto?)

    背景 这是一个后续问题这个线程 https stackoverflow com questions 2957759 using gprof with sockets关于在 C Linux GCC 中处理系统调用的 EINTR 无论我是否打算
  • 是否有可能始终消除 goto?

    在做好一切的同时withgoto 很容易 由 f ex IL 证明 我想知道是否也可以消除all具有更高级别表达式和语句的 goto 语句 例如 使用 Java 支持的所有内容 或者 如果您愿意 我正在寻找的是始终有效的 重写规则 无论 g
  • 批处理 - 动态标签或函数

    我正在进行批量文本冒险 因为它是最简单的语言 几乎不需要任何编码经验 我想知道是否有一种方法可以使动态gotos 或标签 例如 我有一个动态健康和能量系统 它根据从保存文件获取的健康变量显示不同的健康条 C drive 这需要相当多的代码
  • c99 转到过去的初始化

    在调试崩溃时 我在一些代码中遇到了这个问题 int func char p1 malloc if p1 NULL goto err exit char p2 malloc if p2 NULL goto err exit err exit
  • 为什么这个例子在C中陷入了无限循环? [复制]

    这个问题在这里已经有答案了 在下面的示例中 如果我在 Mac OS X 终端中输入一个字符 程序将陷入无限循环 打印Please enter a number 一行一行 并且不允许用户输入任何内容 这段代码有什么问题 解决办法是什么 我想更
  • VBA 中转到 <行号>

    来自 VBA 帮助文件 转到语句 无条件分支到过程中的指定行 Syntax GoTo line 所需line参数可以是任何行标签或行号 Remarks GoTo只能分支到它出现的过程中的行 我的问题是 如何使用跳转到行号GoTo 我知道如何
  • 带有 goto 命令的 Windows 批处理文件不起作用

    我对 GOTO 命令和附属标签有疑问 事实 给定文件夹中的一堆文件 它们是日志错误 我需要打开它们并检查它们是否包含特定字符串 如果是 则从文件名中删除一些字符 最后一次出现 之后的所有字符 包括其本身 并执行其他操作 为了切断字符 我以循
  • 后藤此时却出乎意料——批处理

    我正在尝试制作一个基于批处理文本的游戏 但刚开始写就遇到了以前从未遇到过的问题 menu the game menu opens when the game starts cls echo This game is still being
  • 检测是否只给出整数的程序是否进入无限循环

    program to detect whether only integer has been given or not int main int a b s printf Enter two proper number n BEGIN s
  • 只做如果一天...批处理文件

    你好 我有一个批处理文件 如下所示 if day monday tuesday wednesday thursday friday goto yes else goto no 现在我知道第一行不起作用 我真正想要发生的事情 它会自动检查今天
  • C89(再次)计算 goto 如何

    我需要编写一个自动机 并且我遇到了计算 goto 的旧需求 ala fortran4 我需要在便携式 ansi C 中对此进行编码 我想远离 不要这样做 远离 longjmp setjmp 远离嵌入式 ASM 远离非 ansi C 扩展 有
  • Java中的Goto语句[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我执行了下面的代码Eclipse http en wikipedia org wiki Eclipse 28software 29 但是GO
  • PHP 中的 GOTO 命令?

    我听说 PHP 计划引入 goto 命令的传言 它应该做什么 我尝试搜索了一下 但没有找到任何具有描述性的内容 我明白这不会是 GOTO 10 类似命令 They are not adding a real GOTO but extendi

随机推荐

  • 登录注册页怎么做

    app常见页面 xff1a 引导页 xff1a 概念 xff1a 第一次安装App或者更新App后第一次打开App时所展示的可以滑动的页面 作用 xff1a 主要是用于展示产品本身的一些核心功能点或者特色 启动页 xff1a 概念 xff1
  • win10安装appx工具_如何在Windows 10上安装.Appx或.AppxBundle软件

    win10安装appx工具 Microsoft s new Universal Windows Platform applications use the Appx or AppxBundle file format They re nor
  • 本地mysql数据库开启远程访问

    本地mysql数据库开启远程访问 1 开启远程访问端口 3306端口 依次点击控制面板 系统和安全 windows防火墙 高级设置 入站规则 xff1b 设置端口为3306 一直点下一步 xff1b PS xff1a 入站 xff1a 别人
  • Go_String常用操作

    字符串操作 xff1a len xff1a 统计字符串的长度 span class token keyword func span span class token function main span span class token p
  • Arrarys常用的方法

    int newArrary 61 Arrays copyOf int original int newarrary length 拷贝数组 xff0c 可定义要拷贝的长度 Array copyOf 有进行复制的功能 xff0c 而且底层是调
  • Unity2019 打包Android报错 Android NDK not found

    打包报错 xff1a UnityException Android NDK not found Android NDK not found or invalid NDK配置报错 xff1a Edit gt Preferences gt Ex
  • 安装zabbix proxy

    Centos7搭建zabbix proxy5 0 概述安装创建数据库导入数据下载包安装 编译过程中的报错 概述 Zabbix 代理可以代表 Zabbix 服务器收集性能和可用性数据 这样 xff0c 代理可以自己承担一些收集数据的负载并卸载
  • Mac localhost无法访问

    Mac localhost无法访问 localhost 8080和127 0 0 1 8080可以访问nginx的文件 xff0c 但输入localhost和127 0 0 1都打不开了
  • 生产者与消费者问题(线程同步经典案例)

    生产者 xff08 producer xff09 和消费者 xff08 consumer xff09 问题是并发处理中最常见的一类问题 xff0c 是一个多线程同步问题的经典案例 可以这样描述这个问题 xff0c 有一个或者多个生产者产生某
  • Git忽略提交规则 & .gitignore配置总结

    Git忽略提交规则 xff06 gitignore配置总结 在使用Git的过程中 xff0c 我们喜欢有的文件比如日志 xff0c 临时文件 xff0c 编译的中间文件等不要提交到代码仓库 xff0c 这时就要设置相应的忽略规则 xff0c
  • Spring之配置文件

    Spring简介 Spring是什么 Spring 自带 IoC xff08 Inverse of Control 控制反转 xff09 和 AOP Aspect Oriented Programming 面向切面编程 可以很方便地对数据库
  • Ubuntu开启SSH服务远程登录

    Ubuntu开启SSH服务远程登录 Ubuntu下开启ssh服务并能通过MobaXterm或者 Xshell进行远程登录 本人使用的是window10系统安装的MobaXterm window10系统安装MobaXterm可以参考 http
  • MongoDB

    一 MongoDB简介 1 集成简介 spring data mongodb提供了MongoTemplate与MongoRepository两种方式访问mongodb xff0c MongoRepository操作简单 xff0c Mong
  • 更改桌面壁纸_使用DeskSlide轻松更改桌面墙纸

    更改桌面壁纸 Looking to add some variety to your desktop instead of looking at the same wallpaper day in and day out Have fun
  • 科学素养题(2022年2月-2022年10月)

    二月科学素养 在我国山东省和山西省中间的 山 34 是 C A泰山 B吕梁山 C太行山 D沂蒙山 在一些寻宝游戏中 每个线索都会指向下一个线索的位置 玩家可以顺着这些线索一个一个找到所有的元素 这样的寻宝游戏的设计与 数据结构有着异曲同工之
  • Servlet综合练习:个人博客系统

    功能简介 1 注册新用户 2 xff09 登录已有用户 3 xff09 展示博客列表 xff08 包含文章标题以及作者信息 xff09 xff0c 点击标题就会跳转到文章详情页 4 xff09 文章详情页中 xff0c 显示文章标题 xff
  • Linux 环境搭建(如何获得一个免费云服务器)以及Linux基本指令

    搭建 Linux 环境 Linux 环境的搭建方式 主要有三种 直接安装在物理机上 但是由于 Linux 桌面使用起来非常不友好 不推荐 使用虚拟机软件 将 Linux 搭建在虚拟机上 但是由于当前的虚拟机软件 如 VMWare 之类的 存
  • 深入理解HTTP协议

    目标 xff1a 掌握 http 原理 xff0c 重点掌握 http Request amp Response 格式掌握 http 中相关重点知识 xff0c 如请求方法 xff0c 属性 xff0c 状态码等使用 java socket
  • 异常声音检测MFCC/HMM...相关

    有无研究这个方向的同学 xff0c 自己准备做这个方向 xff0c 可以相互讨论讨论 xff0c 留言我加你 xff0c 一起啊 x1f60f xff01
  • C语言goto语句简单使用

    简单介绍 C语言中提供了可以随意滥用的 goto语句和标记跳转的标号 从理论上 goto语句是没有必要的 xff0c 实践中没有goto语句也可以很容易的写出代码 但是某些场合下goto语句还是用得着的 xff0c 最常见的用法就是终止程序