goto语句

简介: goto语句

1、C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。

goto语句为无条件转向语句,他的一般形式为:

goto 语句标号;


语句标号:用标识符表示,


标识符:由下划线、字母、数字组成,注:不能用数字开头


但是一般不建议使用goto语句,因为它的用法不符合结构化原则,只有在不得已(例如能大大提高效率)时使用。


从理论上 goto 语句是没有必要的,实践中没有 goto 语句也可以很容易的写出代码。

2、goto语句的一般有两个用法:

1.与if语句一起构成循环结构

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//代码1
int main()
{
  char input[10] = { 0 };//输入的字符串
  system("shutdown -s -t 60");//system是一个库函数,可以执行系统命令,
again:
  printf("请注意你的电脑一分钟内关机,如果输入:我是猪,就取消关机\n");
  scanf("%s", input);//数组本身就是地址
  if (0 == strcmp(input, "我是猪"))//strcmp判断两个字符串是否相等,注:不能直接使用==
  {
    system("shutdown -a");//取消关机
  }
  else
  {
    printf("输入错误,你不乖!\n");
      goto again;
  }
  return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
  char input[10] = { 0 };
  system("shutdown -s -t 60");
  printf("请注意你的电脑一分钟内关机,如果输入:我是猪,就取消关机\n");
  while (1)
  {
    scanf("%s", input);//数组本身就是地址
    if (0 == strcmp(input, "我是猪"))//strcmp判断两个字符串是否相等,注:不能直接使用==
    {
      printf("小乖乖,这就取消关机\n");
      system("shutdown -a");//取消关机
      break;
    }
    else
    {
      printf("输入错误,你不乖!\n");
    }
  }
  return 0;
}

代码1和代码2是一样的,运行结果


有兴趣的可以搜索shutdown百度一下

2.从循环体中跳转到循环体外,但在C语言中使用break语句和continue语句也可跳出本层循环和结束本次循环。


最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。

例如:一次跳出两层或多层循环。

多层循环这种情况使用 break 是达不到目的的。它只能从最内层循环退出到上一层的循环。

注:break一次只能跳出一层循环

for (...)
    for (...)
  {
        for (...)
      {
            if ( disaster )
                goto error ;
      }
  }
error :
if ( disaster )
        // 处理错误情况
相关文章
|
Java Spring
spring集成Quartz时区问题造成任务晚执行八小时
spring集成Quartz时区问题造成任务晚执行八小时
602 0
|
7月前
|
存储 人工智能 开发框架
Spring AI Alibaba 应用框架挑战赛圆满落幕,恭喜获奖选手
第二届开放原子大赛 Spring AI Alibaba 应用框架挑战赛决赛于 2 月 23 日在北京圆满落幕。
318 114
|
存储 缓存 供应链
.NET 开源工业级移动端仓库管理系统
【9月更文挑战第17天】.NET 开源工业级移动端仓库管理系统是一款基于 .NET 技术的高效仓库管理解决方案,具备开源免费、工业级品质、移动端支持等特性,提供全面的仓库管理功能,如入库、出库、库存及报表统计,并采用模块化设计,便于定制和扩展,显著提升仓库管理效率与准确性。
216 4
|
9月前
|
消息中间件 Unix Linux
【C语言】进程和线程详解
在现代操作系统中,进程和线程是实现并发执行的两种主要方式。理解它们的区别和各自的应用场景对于编写高效的并发程序至关重要。
314 6
|
10月前
|
存储 JavaScript 前端开发
decimal.js库的安装和使用方法
【10月更文挑战第24天】decimal.js 是一个非常实用的高精度计算库,通过合理的安装和使用,可以在 JavaScript 中实现精确的数值计算和处理。你可以根据具体的需求和项目情况,灵活运用该库来解决数字精度丢失的问题。
|
JSON 前端开发 数据安全/隐私保护
Javaweb之SpringBootWeb案例之 登录功能的详细解析
Javaweb之SpringBootWeb案例之 登录功能的详细解析
178 0
|
IDE Java 测试技术
Springboot单元测试步骤
Springboot单元测试步骤
327 0
|
安全 程序员 编译器
C++一分钟之-C++中的类型转换
【7月更文挑战第8天】C++中的类型转换涉及隐式和显式操作,隐式转换如从`int`到`double`是自动的,但可能导致数据丢失。显式转换包括`static_cast`, `dynamic_cast`, `const_cast`, `reinterpret_cast`,以及转换构造函数。要避免数据丢失、类型不匹配和运行时错误,需谨慎使用显式转换并检查结果。过度使用`reinterpret_cast`应避免。理解这些转换有助于编写更安全的代码。
111 0
|
前端开发
css实用技巧——absolute绝对布局的妙用:表单校验提示信息,制作角标
css实用技巧——absolute绝对布局的妙用:表单校验提示信息,制作角标
98 0
|
Java 开发工具
SpringBoot2.x基础篇:配置文件的加载顺序以及优先级覆盖
`SpringBoot`约定了配置文件,默认为`application.properties`,通过该文件可以修改很多默认的配置,当然我们还可以在该配置文件内添加自定义的配置,该文件通过`key=value`的形式进行配置。