C语言番外篇(4)--------->goto语句

embedded/2025/2/26 21:58:09/

在C语言中,有一个很特殊的语法,这就是goto语句。goto用于实现同一函数的跳转,goto后面会有一个标志,执行goto语句时,就会跳转到标志的位置。

一、goto语句的语法

(1)goto在前,标志在后

没有使用goto语句的代码:

#include <stdio.h>int main()
{printf("C语言\n");printf("Java\n");printf("C++\n");return 0;
}

在VS2019中的运行结果:

上面的例子用于比较使用goto语句的情况:

上述代码使用了goto语句:

#include <stdio.h>int main()
{printf("C语言\n");printf("Java\n");goto flag;printf("C++\n");flag:return 0;
}

在VS2019中的运行结果:

在结果中,我们可以看到goto语句和标志间的代码并没有打印,也就是C++并没有打印在屏幕上。 

(2)goto在后,标志在前

如果标志在前面,goto在后面会是怎样的情况呢?

参考代码:

#include <stdio.h>int main()
{printf("C语言\n");printf("Java\n");flag:printf("C++\n");goto flag;return 0;
}

在VS2019中的运行结果:

这时候我们可以看到,当执行到goto语句的时候又会返回到flag的位置,然后打印C++。后面又到goto,继而又到标志flag。从而,形成了一个死循环。 

二、goto语句的应用场景

从刚刚的例子中,相信你学会了如何使用goto语句。goto语句用在函数中,跳转到标志的位置。如果使用次数过多,将会使得代码的可控性下降,不利于开发人员维护和阅读代码。但是,在多个循环中,使用goto语句可以很好的跳出多层循环。

之前的博客中提及到了多层循环是使用break跳出的,但是一个break只能跳出一层循环,当循环层数过多时使用break的数量也会变多。对于这种情况,我们可以使用goto语句很好解决。

参考代码:

#include <stdio.h>int main()
{int i = 0;int j = 0;int y = 0;for (i = 0; i < 10; i++){for (j = 0; j < 10; j++){for (y = 0; y < 10; y++){if (5 == y){printf("hehe\n");goto flag;}else {printf("hello\n");}}}}flag:return 0;
}

在VS2019中的运行结果:

我们可以看到,当满足判断条件时可以直接跳出多层循环。 


http://www.ppmy.cn/embedded/167369.html

相关文章

【深度学习神经网络学习笔记(二)】神经网络基础

神经网络基础 神经网络基础前言1、Logistic 回归2、逻辑回归损失函数3、梯度下降算法4、导数5、导数计算图6、链式法则7、逻辑回归的梯度下降 神经网络基础 前言 Logistic 回归是一种广泛应用于统计学和机器学习领域的广义线性回归模型&#xff0c;主要用于解决二分类问题。尽…

R语言安装教程(附安装包)R语言4.3.2版本安装教程

文章目录 前言一、安装包下载二、R-4.3.2安装步骤三、rtools43安装步骤四、RStudio安装步骤 前言 本教程将详细、全面地为你介绍在 Windows 系统下安装 R 语言 4.3.2 的具体步骤。无论你是初涉数据领域的新手&#xff0c;还是希望更新知识体系的专业人士&#xff0c;只要按照本…

Java Web开发实战与项目——项目集成与部署

软件开发中&#xff0c;集成与部署是非常关键的一步。无论是将前端与后端模块进行有效的集成&#xff0c;还是通过自动化构建工具&#xff08;如Maven&#xff09;和CI/CD工具&#xff08;如Jenkins&#xff09;实现自动化部署&#xff0c;都会对项目的开发和发布流程产生深远影…

NLP的预处理数据

处理文本数据的主要工具是Tokenizer。Tokenizer根据一组规则将文本拆分为tokens。然后将这些tokens转换为数字&#xff0c;然后转换为张量&#xff0c;成为模型的输入。模型所需的任何附加输入都由Tokenizer添加。 如果您计划使用预训练模型&#xff0c;重要的是使用与之关联的…

check spring configuration解决方法

问题:导入新项目的时候打开idea,会出现checking spring configuration,如下弹窗 这个会极大耗费性能,把IDEA卡的不要不要的. 默默的等它运行完之后右下角出来了这个弹窗 根据提示是这2个文件目录下需要添加spring的配置文件, 直接点击提示的文字 “spring-boot-build.spring-bo…

Docker 高级网络配置

Docker 提供了灵活且强大的网络功能&#xff0c;用于管理容器之间的通信、访问控制、隔离等。通过正确配置 Docker 网络&#xff0c;可以优化容器之间的通信&#xff0c;确保应用在不同环境下的稳定性、安全性和可扩展性。 在本文中&#xff0c;我们将深入探讨 Docker 高级网络…

HarmonyOS 5.0应用开发——鸿蒙接入高德地图实现POI搜索

【高心星出品】 文章目录 鸿蒙接入高德地图实现POI搜索运行结果&#xff1a;准备地图编写ArkUI布局来加载HTML地图 鸿蒙接入高德地图实现POI搜索 在当今数字化时代&#xff0c;地图应用已成为移动设备中不可或缺的一部分。随着鸿蒙系统的日益普及&#xff0c;如何在鸿蒙应用中…

JAVA面试常见题_基础部分-(1)

1.面向对象和面向过程的区别 面向过程 优点&#xff1a; 性能比面向对象高&#xff0c;因为类调用时需要实例化&#xff0c;开销比较大&#xff0c;比较消耗 资源;比如单片机、嵌入式开发、Linux/Unix 等一般采用面向过程开发&#xff0c;性能是最重要的因素。 缺点&#x…