C++基础补充(02)C++其他控制语句break continue goto等

news2024/10/4 3:52:17

文章目录

  • 1. break
  • 2. continue 语句
  • 3. goto 语句
    • goto的存在
  • 4. 跳出多重循环
    • 4.1 goto 直接跳转
    • 4.2 C++11及其后版本的 `return` 语句
    • 4.3 使用标志变量

在C++中,控制语句用于管理程序的执行流程。常见有 break、continue 和 goto。

1. break

break语句主要用于在循环或者switch语句中中断当前执行的流程,并跳出循环或switch结构。

用法:

  • 在switch语句中,从一个case分支中直接跳出 switch,避免执行后续的case分支
  • 在循环结构中,立即结束循环,跳出当前所在的循环体。也就是说在一个双重循环(或者更多层嵌套的循环)中使用break,它只能终止内层的循环,而不会终止外层的循环。

例如,跳出 switch 结构

int num = 2;
switch (num) {
    case 1:
        cout << "Number is 1" << endl;
        break;  // 跳出switch
    case 2:
        cout << "Number is 2" << endl;
        break;  // 跳出switch
    case 3:
        cout << "Number is 3" << endl;
        break;  // 跳出switch        
    default:
        cout << "Number is not 1, 2 or 3" << endl;
}

例如,跳出当前循环体

#include <iostream>
using namespace std;
int main()
{
    int i;
    for (i = 1; i <= 10; i++) {
        if (i == 5) {
            break;  //i等于5时,break终止循环,跳出for循环
        }
        cout << i << " ";
    }
    return 0;
}
// 控制台输出内容为 1 2 3 4

再如,双重循环,代码如下所示。在这个例子中,当 j == 3 时,break语句会终止内层的for循环,但外层的for循环(即 i 的循环)会继续执行

#include <iostream>
using namespace std;
int main() {
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 5; j++) {
            if (j == 3) {
                break;  // 只能跳出内层的for循环
            }
            cout << "i = " << i << ", j = " << j << endl;
        }
    }
    return 0;
}

在这里插入图片描述

2. continue 语句

跳过当前这次循环的剩余代码,立即开始下一次循环,continue不会终止循环
例如:

#include <iostream>
using namespace std;
int main()
{
    int i;
    for (i = 1; i <= 10; i++) {
        if (i == 5) {
            continue;  // 当i等于5时提前结束本次循环,开始下一次循环
        }
        cout << i << " ";
    }
    return 0;
}
// 控制台输出为 1 2 3 4 6 7 8 9 10

3. goto 语句

  • 无条件地从一个地方跳到程序中的另一个任意位置,会降低代码的可读性和可维护性,不建议使用
  • 定义一个标签(label),然后通过goto语句跳转到该标签处执行代码
  • 标签以冒号:结尾,并放在代码的某一行上
    例如:
#include <iostream>
using namespace std;

int main()
{
    int n = 0;
loop_start:
    cout << "请输入一个数字(输入 0 退出):";
    cin >> n;

    if (n != 0)
    {
        cout << "你输入的是:" << n << endl;
        goto loop_start;
    }

    cout << "GoodBye!" << endl;
    return 0;
}

在这里插入图片描述

goto的存在

尽管不推荐goto语句,但它仍然存在于C++语言中。历史原因,C++来源于C,C从汇编和早期的编程语言中演化而来。早期语言中,goto是实现控制流的主要方式之一。在某些旧的代码库或者嵌入式设备中的固件中,可能大量使用了goto语句,为了兼容性保留,能够维护和扩展,不必重写大量逻辑。

也可以用于跳出嵌套较深的情况。见后面的4. 跳出多重循环

goto在某些情况下还可以用于处理资源释放或者异常处理,有时候在一些嵌入式系统或者需要高性能的应用中,直接用goto进行异常处理或者资源清理可能会更加简洁。例如:

#include <iostream>
#include <fstream>
using namespace std;

int main() 
{
    ifstream file;
    file.open("example.txt");

    if (!file.is_open()) {
        goto error;  // 如果文件打开失败,跳到错误处理部分
    }

    // 文件操作代码
    // ...

    file.close();
    return 0;

error:
    cout << "Error opening file!" << endl;
    return 1;
}

在这个例子中,如果文件打开失败,程序会直接跳转到error部分,执行错误处理逻辑。虽然这种方式不如C++中的try-catch异常处理机制规范,但在某些对性能要求极高或资源有限的场合,比如嵌入式开发、驱动程序编写领域等,这种方式提供了一种相对低开销的替代方案,可能会更好。

4. 跳出多重循环

4.1 goto 直接跳转

例如:

#include <iostream>
using namespace std;
int main() 
{
    bool found = false;
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 10; j++) {
            if (i * j == 50) {
                found = true;
                goto end_loop;  // 跳出双重循环
            }
        }
    }
    end_loop:
    if (found) {
        cout << "Found the pair!" << endl;
    } else {
        cout << "Pair not found!" << endl;
    }
    return 0;
}

4.2 C++11及其后版本的 return 语句

可以使用 return 直接结束函数的执行,函数都结束了,从而循环结束了,也就是说自动跳出所有嵌套的循环。例如

#include <iostream>
using namespace std;
void processLoop()
{
    int i, j;
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5; j++)
        {
            if (j == 3)
            {
                return ;//直接结束函数体,从而跳出循环
            }
            cout << "i = " << i << ", j = " << j << endl;
        }
    }
    cout << "j==3时,提前退出所有循环" << endl;
                       //不会执行,因为return提前结束了函数体   
}
int main()
{
    processLoop();   //调用函数
    cout << "循环在 j 为 3 时提前结束" << endl; //控制台输出
    return 0;
}

在这里插入图片描述
这里,如果 return 语句放在了 main 函数中,在 j == 3 时,则会直接结束整个程序的执行。

与前面放在普通函数里有所不同,普通函数因为return结束了自身的执行,还可以返回到主调函数中。

然而,在main函数中,return 则意味着程序完全终止,即程序立即退出。

#include <iostream>
using namespace std;
int main()
{
    int i, j;
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5; j++)
        {
            if (j == 3)
            {
                return 0;
            }
            cout << "i = " << i << ", j = " << j << endl;
        }
    }
    return 0;
}

4.3 使用标志变量

用标志变量来标记是否需要跳出所有循环,而不是直接使用 return 结束程序。

#include <iostream>
using namespace std;
int main()
{
    int i, j;
    bool flag = false; //起到标志作用的变量
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5; j++)
        {
            if (j == 3)
            {
                flag = true; //设置标志
                break; //先跳出内层循环
            }
            cout << "i = " << i << ", j = " << j << endl;
        }

        if (flag) //判断标志
        {
            break; //跳出外层循环
        }           
    }
    cout << "退出了双重循环" << endl;
    return 0;
}

在这里插入图片描述

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

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

相关文章

【GEE学习第一期】GEE介绍、注册及基本使用

【GEE学习第一期】GEE介绍、注册及基本使用 GEE基本介绍GEE架构编辑语言&#xff1a;JavaScript GEE注册GEE平台界面GEE编辑器API区详解 GEE环境配置本地Python环境配置在线Python环境配置 参考 GEE基本介绍 地球引擎代码编辑器&#xff08;Google Earth Engine, GEE&#xff…

oauth2授权码模式单点登录

文章目录 前言一、单点登录是什么&#xff1f;二、oauth2授权码模式单点登录流程1.流程图2. 代码相关2. 验证流程 总结 前言 oauth2 有四种模式,常用的为密码和授权码,剩下两种几乎不用 密码模式,很好理解,就是根据输入的用户名/密码进行登录认证的,最终返回一个合法token授权…

Coze:如何使用主页对话框?

你好&#xff0c;我是三桥君 我们今天要介绍的功能模块是“主页对话框”。 目录 访问官网 登录首页 基本功能 主页对话框 第一个功能&#xff1a;如何与自己收藏的机器人进行对话&#xff1f; 第二个功能&#xff1a;如何请求主页对话框的机器人帮助创建一个新的机器人&#x…

C++11 异步操作 std::future类

阅读导航 引言一、异步的概念二、应用场景1. 异步任务处理2. 并发控制3. 结果获取 三、使用示例1. 使用std::async关联异步任务&#x1f4bb;示例代码说明 2. 使用std::packaged_task和std::future配合&#xff08;1&#xff09;定义std::packaged_task&#xff08;2&#xff0…

游戏修改器Cheat Engine CE v7.5修改版下载安装详细方法

Cheat Engine是一个专注于游戏的修改器。它可以用来扫描游戏中的内存&#xff0c;并允许修改它们。它还附带了调试器、反汇编器、汇编器、变速器、作弊器生成、Direct3D操作工具、系统检查工具等。 具体安装方法如下&#xff1a; 地址&#xff1a;Cheat Engine 7.5.zip 解压文件…

Prompt 初级版:构建高效对话的基础指南

Prompt 初级版&#xff1a;构建高效对话的基础指南 文章目录 Prompt 初级版&#xff1a;构建高效对话的基础指南一 “标准”提示二 角色提示三 多范例提示四 组合提示五 规范化提示 本文介绍了提示词的基础概念与不同类型&#xff0c;帮助用户更好地理解如何在对话中构建有效的…

Java 计算器项目

更多有趣请关注公众号 计算器项目 代码仓库&#xff1a;https://gitee.com/wengxiulin/vs_code 项目图片 项目简介 这是一个用 Java 编写的简单计算器应用程序&#xff0c;具有基本的数学运算功能。该计算器支持加、减、乘、除等运算&#xff0c;并提供用户友好的图形界面…

CSP-J模拟赛三补题报告

前言 挂了110pts( ⇑ \Uparrow ⇑ \hspace{14em} 有史以来最大傻逼 T1&#xff1a; 100 p t s \color{green}100pts 100pts T2: 100 p t s → 80 p t s \color{green}100pts\color{yellow}\rightarrow\color{red}80pts 100pts→80pts T3: 100 p t s → 10 p t s \color{gre…

java 的三种IO模型(BIO、NIO、AIO)

java 的三种IO模型&#xff08;BIO、NIO、AIO&#xff09; 一、BIO 阻塞式 IO&#xff08;Blocking IO&#xff09;1.1、BIO 工作机制1.2、BIO 实现单发单收1.3、BIO 实现多发多收1.4、BIO 实现客户端服务端多对一1.5、BIO 模式下的端口转发思想 二、NIO 同步非阻塞式 IO&#…

【Godot4.3】模拟平面图形绕轴或点在空间旋转

概述 平面图形&#xff0c;除了常规的线性变换&#xff1a;平移、缩放、旋转、斜切之外。还可以模仿在三维空间旋转、透视等等。 矩形绕纵对称轴旋转实点的轨迹 绕对称旋转是个特殊情况&#xff0c;轨迹是圆也是为了便于理解。更实际的情况应该是椭圆。非对称轴旋转的情况轨…

Java 之深入理解 String、StringBuilder、StringBuffer

前言 由于发现 String、StringBuilder、StringBuffer 面试的时候会经常问到&#xff0c;这里就顺便总结一下&#xff1a;本文重点会以这三个字符串类的性能、线程安全、存储结构这三个方面进行分析 ✨上期回顾&#xff1a;Java 哈希表 ✨目录 前言 String 介绍 String 的不可变…

2024/10/3 408数据结构大题打卡

最短路径复习&#xff1a; bfs&#xff1a;只能解决无权图

【LeetCode每日一题】——17.电话号码的字母组合

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 回溯 二【题目难度】 中等 三【题目编号】 17.电话号码的字母组合 四【题目描述】 给定一个…

redis 5的安装及启动(window)

最近看大模型的时候发现入手redis的同学没有练手的&#xff0c;而且大部分redis的文章要钱才能看&#xff0c;在这里我把路径和环境配置&#xff0c;启动给大家说一下 下载 redis5的获取链接在下面&#xff08;为什么是redis5&#xff0c;因为上个模型用的就是redis5&#xff…

pipe函数的例子

代码&#xff1a; #include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> #include<sys/types.h> int main(void) {int result -1;int fd[2],nbytes;pid_t pid;char string[80]"ni hao, pipe!";char readbuff…

linux信号 | 学习信号四步走 | 一篇文章教你理解信号如何保存

前言&#xff1a; 本节内容是信号的保存。 学习信号&#xff0c; 我们首先了解了信号的概念&#xff0c; 然后学习了信号的产生方式。 现在就开始讲解信号在时间窗口内是如何保存在进程内部的。 ps&#xff1a;本节内容需要了解信号的概念&#xff0c; 希望友友们了解一些信号…

实用技能分享!推荐最适合论文写作的5款ai工具

在当今学术研究和教育领域&#xff0c;AI工具的应用已经变得越来越普遍。这些工具不仅能够提高写作效率&#xff0c;还能帮助生成高质量的文稿。对于教师而言&#xff0c;选择合适的AI工具可以显著提升论文写作的效率和质量。本文将重点推荐五款最适合教师论文写作的AI工具&…

Linux聊天集群开发之环境准备

一.windows下远程操作Linux 第一步&#xff1a;在Linux终端下配置openssh&#xff0c;输入netstate -tanp,查看ssh服务是否启动&#xff0c;默认端口22.。 注&#xff1a;如果openssh服务&#xff0c;则需下载。输入命令ps -e|grep ssh, 查看如否配有&#xff0c; ssh-agent …

【重学 MySQL】四十六、创建表的方式

【重学 MySQL】四十六、创建表的方式 使用CREATE TABLE语句创建表使用CREATE TABLE LIKE语句创建表使用CREATE TABLE AS SELECT语句创建表使用CREATE TABLE SELECT语句创建表并从另一个表中选取数据&#xff08;与CREATE TABLE AS SELECT类似&#xff09;使用CREATE TEMPORARY …

【重学 MySQL】五十四、整型数据类型

【重学 MySQL】五十四、整型数据类型 整型类型TINYINTSMALLINTMEDIUMINTINT&#xff08;或INTEGER&#xff09;BIGINT 可选属性UNSIGNEDZEROFILL显示宽度&#xff08;M&#xff09;AUTO_INCREMENT注意事项 适合场景TINYINTSMALLINTMEDIUMINTINT&#xff08;或INTEGER&#xff0…