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

简单介绍

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

语法

C 语言中 goto 语句的语法:

goto label;
..
.
label: statement;

示例对比

#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 的跳出

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

(0)

相关推荐

  • cmd批处理 goto call命令使用说明

    第一个批处理 goto命令使用方法将 cmd.exe 定向到批处理程序中带标签的行. GOTO label label   指定批处理程序中用作标签的文字字符串. 标签必须单独一行,并且以冒号打头. 如果命令扩展被启用,GOTO 会如下改变: GOTO 命令现在接受目标标签 :EOF,这个标签将控制转移到当前 批脚本文件的结尾.不定义就退出批脚本文件,这是一个容易的 办法.有关能使该功能有用的 CALL 命令的扩展描述,请键入 CALL /?. 看提示我们需要知道call命令的使用方法从批处理程

  • C++跳转语句之Goto对变量定义的影响详解

    前言 goto语句也称为无条件转移语句,其基本形式如下 : 语句标号由一个有效地标识符和符号";"组成,其中,标识符的命名规则与变量名称相同,即由字母.数字和下划线组成,且第一个字符必须是字母或下划线.执行goto语句后,程序就会跳转到语句标号处,并执行其后的语句. 通常goto语句与if条件语句连用,但是,goto语句在给程序带来灵活性的同时,也会使得使程序结构层次不清,而且不易读,所以要合理运用该语句. 发现问题 我们经常碰到有在goto后面定义变量,linux下编译不通过的问题(

  • cmd goto命令 流程跳转

    如果对不同的情况,需要执行不同的既定操作,若还是按照常规的执行流程的话,是无法完成任务的,这个时候,就需要引入流程跳转的概念,动用流程跳转语句 goto 了.流程跳转的含义是:改变默认的执行顺序,强制跳转到指定的位置执行特定的程序块. 先来看个例子:假设需要判断用户输入的是A还是B,代码可以写成这样: 复制代码 代码如下: @echo off set /p input=请输入字母A或B: if "%input%"=="A" goto A if "%inpu

  • C++流程控制中用于跳转的return和goto语句学习教程

    return 语句 终止函数的执行并返回对调用函数的控制(或对操作系统的控制,如果您从 main 函数转移控制).紧接在调用之后在调用函数中恢复执行. 语法 return [expression]; 备注 expression 子句(如果存在)将转换为函数声明中指定的类型,就像正在执行初始化一样.从该类型的表达式到 return 类型的函数的转换会创建临时对象. expression 子句的值将返回调用函数.如果省略该表达式,则函数的返回值是不确定的.构造函数和析构函数以及类型为 void的函数

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

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

  • R语言判断语句的使用详解

    判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的). 下面是大多数编程语言中典型的判断结构的一般形式: R 语言提供了以下类型的判断语句: if 语句 if...else 语句 switch 语句 if 语句 一个 if 语句 由一个布尔表达式后跟一个或多个语句组成. 语法格式如下: if(boolean_expression) { // 布尔表达式为真将执行的语句 } 如果布尔表达式 boolean_expression

  • C语言 while语句的用法详解

    在C语言中,共有三大常用的程序结构: 顺序结构:代码从前往后执行,没有任何"拐弯抹角": 选择结构:也叫分支结构,重点要掌握 if else.switch 以及条件运算符: 循环结构:重复执行同一段代码. 前面讲解了顺序结构和选择结构,本节开始讲解循环结构.所谓循环(Loop),就是重复地执行同一段代码,例如要计算 1+2+3+--+99+100 的值,就要重复进行99次加法运算. while循环 while循环的一般形式为:     while(表达式){         语句块  

  • C语言switch 语句的用法详解

    C语言虽然没有限制 if else 能够处理的分支数量,但当分支过多时,用 if else 处理会不太方便,而且容易出现 if else 配对出错的情况.例如,输入一个整数,输出该整数对应的星期几的英文表示: #include <stdio.h> int main(){ int a; printf("Input integer number:"); scanf("%d",&a); if(a==1){ printf("Monday\n&q

  • Go语言开发redis封装及简单使用详解

    目录 go redis 集合操作--sadd 安装redigo 带密码的redis操作 批量添加 无密码redis操作 redis封装包 参考 go redis 集合操作--sadd redis的go语言包,我们使用官方推荐的redigo,https://github.com/garyburd/redigo 安装redigo $ go get github.com/garyburd/redigo 带密码的redis操作 package main import ( "log" "

  • Go语言Mock使用基本指南详解

    当前的实践中问题 在项目之间依赖的时候我们往往可以通过mock一个接口的实现,以一种比较简洁.独立的方式,来进行测试.但是在mock使用的过程中,因为大家的风格不统一,而且很多使用minimal implement的方式来进行mock,这就导致了通过mock出的实现各个函数的返回值往往是静态的,就无法让caller根据返回值进行的一些复杂逻辑. 首先来举一个例子 package task type Task interface { Do(int) (string, error) } 通过mini

  • C语言之system函数案例详解

    来看看在windows操作系统下system () 函数详解(主要是在C语言中的应用) 注意:在windows下的system函数中命令可以不区别大小写! 函数名: system 功 能: 发出一个DOS命令 用 法: int system(char *command); system函数已经被收录在标准c库中,可以直接调用. 例如: #include<stdio.h> #include<stdlib.h> int main() { printf("About to sp

  • C语言实现24点问题详解

    目录 题目描述 问题分析 代码实现 运行结果 题目描述 在屏幕上输入1〜10范围内的4个整数(可以有重复),对它们进行加.减.乘.除四则运算后(可以任意的加括号限定计算的优先级),寻找计算结果等于24的表达式. 例如输入4个整数4.5.6.7,可得到表达式:4*((5-6)+7)=24.这只是一个解,要求输出全部的解.要求表达式中数字的顺序不能改变. 问题分析 这道题理解起来很简单,就是拼凑加减乘除,使4个数的运算结果等于24. 由于四则运算中,乘除的优先级高于加减,所以必须"加括号"

  • 史上最强C语言分支和循环教程详解

    目录 3.3 do...while()循环 3.3.1 do语句的语法: 3.3.2 执行流程 3.3.3 do语句的特点 3.3.4 do while循环中的break和continue 3.4 练习 3.4.1. 计算 n的阶乘. 3.4.2. 计算 1!+2!+3!+--+10! 3.4.3. 在一个有序数组中查找具体的某个数字n. 3.4.4. 编写代码,演示多个字符从两端移动,向中间汇聚. 3.4.5. 编写代码实现,模拟用户登录情景,并且只能登录三次. 3.4.6.猜数字游戏实现 4

  • 用c语言编写一个通讯录代码详解

    目录 实现通讯录的思路如下: 总结 实现通讯录的思路如下: 1.程序运行起来时用户首先要看到菜单栏选项并且对应菜单栏所给出的选项做出选择,这里我们简单设计一个Menu()函数可以让用户看见可选项目: 2.用户可选的范围应该是1~7,为了避免用户做出超出范围的选择我们可以用switch语句来判断用户的选择若用户输入的数字非法还可以让用户继续选择,而继续选择这个动作需要用到while语句,用户对通讯录的不断操作也需要用到while语句: 3.用户选择不同的选项,程序就要调用对应的函数来实现其功能并且

随机推荐