再学C语言26:分支和跳转——goto语句

news2024/11/26 0:33:58

goto语句包括两个部分:goto和一个标签名称

goto point1;

为使goto语句工作,程序中必须包含由point1标签定位的其他语句

point1: printf("hello world! \n"); // 标签 + 冒号 + 一条语句

 示例代码:

/* test of goto */
#include <stdio.h>
int main(void)
{
    int num;
    int i;
    int sum = 0;

    printf("please enter a number: \n");
    scanf("%d", &num);

    for(i = 0; i <= num; i++)
    {
        sum += i;
        if(sum > 1000)
        {
            goto err; //数据超限,直接跳出循环
        }
        else
        {
            printf("current calculation result is %d \n", sum); // 每次循环打印一次
        }
        
    }

    err: printf("error: number out of range \n"); // 相应的处理程序
    
    return 0;
}

运行结果 :

一、重要原则:C中避免使用goto语句

原则上,C程序根本不需要使用goto语句

1)if语句、if-else语句、while语句、continue语句、break语句可以在不同的应用场景中代替goto的功能

2)不要在程序中使用goto语句随意跳转到程序的不同部分

3)允许的goto:在出现故障时从一组嵌套的循环中跳出(因为单条的break语句仅能跳出最里层的循环,示例:

...
while(a)
{
    for(i = 0; i < num; i++)
    {
        for(j = 0; j < num; j++)
        {
            statement1
            if(bit error) // 判定程序出错
            {
                goto error_function; // 使用goto语句直接跳转到相应的处理程序
            }
            statement2;
        }
        statement3;
    }
    statement4;
}
statement5;

error_function: function(); // 处理程序
...

二、程序跳转指令总结:

break指令

可以与3中循环形式(while、for、do-while)中的任何一种以及switch语句一起使用

功能:令程序跳过包含它的循环或switch语句的剩余部分,继续执行紧跟在循环或switch后的下一条命令

continue指令

可以与3种循环形式(while、for、do-while)中的任何一种一起使用,不能和switch语句一起使用

功能:令程序跳过循环中的剩余语句;对于while或for循环,开始下一个循环周期;对于do-while循环,退出条件进行判断,如果必要则开始下一个循环周期

goto语句

功能:令程序直接跳转到由指定标签定位的语句;使用冒号将被标记的语句和其标签分隔;标签遵循变量的命名规则;被标记的语句可以出现在goto之前或之后


选择语句是开发具有智能行为程序的基础

在C中,if、if-else、switch语句,连同调减运算符(? :)一起实现了选择

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/143730.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高一数学试题-2022年秋期末试卷

一、选择题 已知集合A{x∈N∣−2<x<52}A \{x \in \mathbf{N}| -2 < x < \frac{5}{2}\}A{x∈N∣−2<x<25​}&#xff0c;B{−2,−1,0,1,2,4}B \{-2, -1, 0, 1, 2, 4\}B{−2,−1,0,1,2,4}&#xff0c;则A∩BA \cap BA∩B A. {−1,0,1,2}\{-1, 0, 1, 2\}{−…

什么是AI预训练模型?

什么是预训练模型? 预训练 AI 模型是一种深度学习模型&#xff0c;在大型数据集上进行训练以完成特定任务&#xff0c;它可以按原样使用或定制以满足多个行业的应用需求。 想象一下&#xff0c;试图教一个蹒跚学步的孩子什么是独角兽。 一个好的起点可能是展示该生物的子图像…

[NOIP2017 提高组] 奶酪(C++,并查集)

题目背景 NOIP2017 提高组 D2T1 题目描述 现有一块大奶酪&#xff0c;它的高度为 hhh&#xff0c;它的长度和宽度我们可以认为是无限大的&#xff0c;奶酪中间有许多半径相同的球形空洞。我们可以在这块奶酪中建立空间坐标系&#xff0c;在坐标系中&#xff0c;奶酪的下表面…

用纯C实现单链表

前言 什么是单链表&#xff1f;链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。链表的创建 需要创建一个小项目工程 创建三个文件 ⭐SListNode.h放单链表的头文件&#xff0c;函数声明 ⭐SListNode.c放单…

springcloud之Gateway服务网关

1.Gateway服务网关 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目&#xff0c;该项目是基于 Spring 5.0&#xff0c;Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的网关&#xff0c;它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式…

游戏行业(北区)客户沙龙丨阿里云用户组北京站

2022 年 8 月 30 日&#xff0c;阿里云在北京举办了第 9 场阿里云用户组&#xff08;AUG&#xff09;活动&#xff0c;活动主题为“游戏行业&#xff08;北区&#xff09;客户沙龙”吸引了众多技术从业者及企业管理者来到现场交流分享。 通过本次活动&#xff0c;参会企业在不同…

Java探针技术详解

简介 在JVM中运行中&#xff0c;类是通过classLoader加载.class文件进行生成的。在类加载器加载.class文件生成对应的类对象之前时&#xff0c;我们可以通过修改.class文件内容&#xff08;就是字节码修改技术&#xff09;&#xff0c;达到修改类的目的。JDK提供了对字节码进行…

rhel配置zfs

rhel配置zfs环境声明ZFS简介ZFS块指针的结构ZFS的存储池布局rhel8/rhel9安装zfs始终在启动时加载OpenZFS模块开机自启zfs服务zfs基本操作查看磁盘创建pool和ZFS文件系统创建一个存储池设置zfs挂载点为多个用户创建起始目录向池中添加更多空间修改文件系统名称删除文件系统修改存…

数据库的存储引擎和事务

Mysql默认使用INNODB存储引擎 数据库中的各表均被&#xff08;在创建表时&#xff09;指定的存储引擎来处理。 服务器可用的引擎依赖于以下因素&#xff1a;MySql的版本、服务器在开发时如何被配置、启动选项 为了解当前服务器中有哪些存储引擎可用&#xff0c;可使用show e…

2022 年 项目中常用的工具函数

目录1. 数字千分位化&#xff0c;支持保留小数点2. 前端生成 uuid3. 传入日期换算出是周几4. 通过计算 text-indent 偏移的负值&#xff0c;实现文字居右隐藏, 右侧对齐 ...text5. 时间格式化函数6. 防抖和节流7. 前端文件流下载8. 后端返回 无格式化时间处理为格式化 20220101…

回收租赁商城系统功能拆解03讲-商品分类

回收租赁系统适用于物品回收、物品租赁、二手买卖交易等三大场景。 可以快速帮助企业搭建类似闲鱼回收/爱回收/爱租机/人人租等回收租赁商城。 回收租赁系统支持智能评估回收价格&#xff0c;后台调整最终回收价&#xff0c;用户同意回收后系统即刻放款&#xff0c;用户微信零…

【C语言进阶】指针进阶-回调函数

作者:匿名者Unit 目录一.函数指针数组1.定义2.转移表二.回调函数1.定义2.qsort的使用3.冒泡模拟实现qsort一.函数指针数组 1.定义 在之前我们已经了解过了函数指针: int(*p)(int,int)&add;我们还可以将函数的地址存放在数组&#xff0c;也就是函数指针数组 int (*p[10…

Qt音视频开发10-ffmpeg内核硬解码

一、前言 为了极大的降低CPU的占用&#xff0c;实现硬解码&#xff08;也叫硬件加速&#xff09;非常有必要&#xff0c;一个视频文件或者一路视频流还好&#xff0c;如果增加到64路视频流呢&#xff0c;如果是4K、8K这种高分辨率的视频呢&#xff0c;必须安装上硬解码才是上上…

初始Spring

初始Spring SSM框架的老大是&#xff1a;Spring大管家&#xff0c;无处不在 Spring是应用了很多优秀的设计模式,对于项目的实现,提供了优秀的解决方案;Spring是一个轻量级(低侵入) 框架.类与类之间的解耦合 IOC控制反转 实现大管家 AOP 增强&#xff0c;面向切面编程&…

QT—QPalette调色板类

Qt提供的调色板类QPalette专门用于管理部件的外观显示&#xff0c;相当于部件或对话框的调色板&#xff0c;管理他们所有的颜色信息。每个部件都包含一个QPalette对象&#xff0c;在显示时&#xff0c;按照它的QPalette对象中对各部分各状态下的颜色的描述进行绘制。示例点击左…

C语言-数据的存储-浮点数的存储(8.2)​​​​​​​

目录​​​​​​​ 思维导图&#xff1a; 浮点型在内存中的存储 1.1一个经典的例子 1.2 浮点数存储规则 1.3实践举例 写在最后&#xff1a; 思维导图&#xff1a; 浮点型在内存中的存储 1.1一个经典的例子 #include <stdio.h>int main() {int n 9;//以整形的形式…

SHELL脚本学习 --- 第七次作业(awk)

SHELL脚本学习 — 第七次作业 思路&#xff1a; 1&#xff0c;df -h获取磁盘情况&#xff0c;先用grep过滤出根分区所属行&#xff0c;然后awk打印相应的域 2&#xff0c;首先把多个空格缩成一个&#xff0c;然后用grep找到ens160所属的IP&#xff0c;在awk中使用正则匹配inet…

C++ STL 容器类和迭代器

一、STL容器类 1.1 STL介绍 容器就是盛放东西的东西&#xff0c;这里被盛放的一般是数据对象&#xff0c;用来盛放的是容器类容器类的内核就是&#xff1a;数据结构 算法STL(Standard Template Library,标准模板库)STL从广义上分为:容器(container)算法(algorithm)迭代器(it…

在泰国旅居的第5天,我定了两个新目标

点击上方 "大数据肌肉猿"关注, 星标一起成长点击下方链接&#xff0c;进入高质量学习交流群今日更新| 1052个转型案例分享-大数据交流群我在12月14号写了2023年&#xff0c;重新扬帆起航&#xff01;&#xff0c;里面说了2023年开始全球旅居办公&#xff0c;而在元旦…

历史大讲堂:这是老古董 苹果第一代Macintosh详解

还记得这个苹果吗&#xff1f;这是美国苹果公司的图标。今天我们就来借着苹果最出名的第一代个人电脑唠一唠苹果的前世今生。 这一代个人电脑 已经有鼠标了&#xff08;右下角&#xff09;&#xff0c;虽然非常的古老 macOS第一代系统就运行在这个上。这里我们也来唠一唠Macin…