当前位置: 首页 > news >正文

C++基础语法:while的使用

前言

      "打牢基础,万事不愁" .C++的基础语法的学习."学以致用,边学边用",编程是实践性很强的技术,在运用中理解,总结.

引入

        while的使用是编写代码的基础内容.笔者的记忆力已不如以前,最近遇到了还花了不少功夫,可见是掌握地不够牢固.所以对while的思路和内容做一个归纳,便于以后使用.当然最重要的还是在思路的推导和总结.

while的概览

        while指的是条件循环.即:满足条件在代码块中反复执行,条件不满足则退出. 

        代码格式:while(循环条件){        //while的代码块语句1;语句2;}                

        使用while的重点有两个,他们都围绕着while的条件

        1.循环条件的描述                        2.退出循环的条件

        循环条件

        while后跟着的循环条件,是一个返回值为bool类型的表达式.

        例如:        true;                     //bool类型值,可以做表达式

                        a>b;                     //比较表达式,返回值是bool类型

                        a<b && a>c         //逻辑表达式,返回值是bool类型

                         cin>>a;              //输入语句,他的返回值也是bool类型;成功执行返回true,否则false

        退出循环条件

        如果没有退出循环条件,那么只能是无限循环,这通常是不想被看见的情况

//无限循环1
while(true){cout<<"hello"<<endl;
}
//无限循环2
int a=2;
while(a>1){cout<<"hello"<<endl;
}

        因此可以作出推导:循环条件中有变量,当变量等于某个值,表达式值为false,退出循环

while的几种应用

        有时候编码内容文字不好表达,简单给个概念,用实际代码来说明.

        1>while遍历字符串

/*while遍历字符串*/char p[] = "hello";char* pt = p;int n = 1;while (*pt) {cout << "第"<<n<<"个字符为:" << *pt << endl;pt++;n++;}

        C++中如果写 char *pt="hello",编译通不过.在C语言中应该可以.C语言中字符串本质上字符数组,C++中常用string对象表达字符串,string对象实现了begin(),end()等接口函数,被看作"字符容器"

        上面代码中用到了"字符串末尾是空字符''\0"这个特点,当遍历到字符串末尾时,while判定为false,跳出循环.

        2>while遍历容器

/*while遍历容器*/list<int> li;li.push_back(1);li.push_back(2);li.push_back(3);auto lip = li.begin();while (lip!=li.end()) {cout << *lip << endl;lip++;}

         上面代码常用for来写,用到了"超尾迭代器解引用是空值"这个特点.空值到底是0还是nullptr或者其他什么并不重要,反正while可以判定为false.

        3>while和cin(输入流)相结合

        下面代码用输入字符控制while的循环退出 

	char ar;int b=0;while (cin >> ar && ar != 'q') {    //输入除空白字符(空格,回车,tab)以外的字符,q退出cout << "你输入的字符是:" << ar << endl;b++;}cout << "b的值是:" <<b<< endl;

        上面代码中cin>>ar表达式,他的返回值也是bool类型.成功输入返回true,否则返回false.

        代码表示:只要不输入q,其他输入进去的字符被显示出来;此外声明的变量b表示输入次数.

        cin有个特点:缓冲流中的空白字符不被识别,比如输入"   3",识别为3,前面的空白字符被丢弃.但cin.get()和cin.getline()会识别空白字符.具体情况可以上网搜索.

        下面代码用输入格式控制while的循环退出         

	    double x, y;cout << "输入两个double型数字:" << endl;while (cin >> x >> y) {					//输入两个值cout << "输入两个值加起来是:" << x + y << endl;cout << "格式:数字+空格+数字+空格,其他字母退出" << endl;}

         上面代码实现两个double类型值相加,输入"2 3",计算出5;当输入"t t"等不符合格式时,退出循环

//使输入值在范围内
int number;
while(!(cin>>number && number>=1 && number<=6)){    //当输入不符合要求时cin.clear();                                    //重置输入while(cin.get()!='\n');                         //清除多余输入cout<<"请输入1到6之间的整数(含1和6)"<<endl;
}
.....
//跳出循环后number值在正确范围内(1~6)

        上面代码表示必须输入1~6内的一个整数,才可以跳出循环 

        下面是一个嵌套的while        

/*用输入作为while的循环条件的写法*/double x, y;cout << "输入任意字符继续,按t退出" << endl;while (cin >> ar && ar != 'q') {		//输入选择cout << "你还在循环中:"  << endl;cout << "输入两个double型数字:" << endl;while (cin >> x >> y) {					//输入两个值cout << "输入两个值加起来是:" << x + y << endl;cout << "按其他键退出" << endl;}									cin.clear();						//注意:一定要用clear,否则直接退出!while(cin.get()!='\n');				//注意:这句和上一句一起用,网上说的cin.syc()不行!cout << "输入任意字符继续,按t退出" << endl;}

         上面代码有个需要注意的地方,从cin从while中跳出来,要将缓冲区做处理,把缓冲区中直到回车符前的部分全部吸收,或者沿用书上叫法-丢弃.不让他影响到下一次的输入.

		cin.clear();						while(cin.get()!='\n');				

        这部分相当于C语言中的

int ch;
while((ch=getchar())!='\n');

          4>while和比较表达式结合

        假设现在有两个数组,一个数组有n个值,另一个数组有n+2个值.把一个数组内的值复制到另一个数组当中.----当然这个例子不是太典型,一般用for来完成.

int a[3]={1,2,3};
int length=sizeof(a)/sizeof(int);
int b[length+2];
int num=0;                            //记录元素个数
while(num<length){                    //数组之间传递值b[num]=a[num];num++;
}

小结

        while条件必须是返回值为bool类型的表达式,可用到的表达式有:比较表达式,逻辑表达式,输入表达式cin, 

相关文章:

C++基础语法:while的使用

前言 "打牢基础,万事不愁" .C的基础语法的学习."学以致用,边学边用",编程是实践性很强的技术,在运用中理解,总结. 引入 while的使用是编写代码的基础内容.笔者的记忆力已不如以前,最近遇到了还花了不少功夫,可见是掌握地不够牢固.所以对while的思路和内容…...

鹏哥C语言自定义笔记重点(29-)

29.函数指针数组 30.void指针是不能直接解引用&#xff0c;也不能-整数。 void*是无具体类型的指针&#xff0c;可以接受任何类型的地址。 31.qsort:使用快速排序的思想实现一个排序函数(升序) 32. 33.地址的字节是4/8 34.char arr[]{a,b} sizeof(arr[0]1)答案是4&#xff0…...

代码随想录算法训练营第六十天 | dijkstra(堆优化版)、Bellman_ford 算法精讲

一、dijkstra&#xff08;堆优化版&#xff09; 题目连接&#xff1a;47. 参加科学大会&#xff08;第六期模拟笔试&#xff09; (kamacoder.com) 文章讲解&#xff1a;代码随想录 (programmercarl.com)——dijkstra&#xff08;堆优化版&#xff09; 二、Bellman_ford 算法精讲…...

boost::asio 库版本,C/C++代码编译兼容性

1、boost::asio::spawn 开启有栈&#xff08;stackful&#xff09;协同程序&#xff0c;版本改进及限制 > boost_1_80 版本应采用以下方式。 auto f [self, this](const boost::asio::yield_context& y) noexcept {bool success_ do_handshake(y);if (!success_) {clo…...

前端开发的项目导入方法与应用

前端项目启动问题归集&#xff1a; 由于前端的项目对于npm的版本有要求&#xff0c;需要将其升级到20&#xff0c;所以必要的时候通过nvm&#xff0c;或者直接下载最新的安装包进行npm覆盖安装。在项目目录中应用npm i安装node_modules&#xff0c;如果没有正常安装的话&#…...

C++:模拟实现string

前言&#xff1a; 为了更好的理解string底层的原理&#xff0c;我们将模拟实现string类中常用的函数接口。为了与std里的string进行区分&#xff0c;所以用命名空间来封装一个自己的strin类。 string.h #pragma once #define _CRT_SECURE_NO_WARNINGS 1#include<iostream&…...

浅谈Kafka(一)

浅谈Kafka&#xff08;一&#xff09; 文章目录 浅谈Kafka&#xff08;一&#xff09;Kafa的设计是什么样的数据传输的事务定义消息队列的应用场景Kafka怎么样判断节点是否存活Kafka的消息是采用pull模式还是push模式Kafka在磁盘上的消息格式Kafka高效文件存储设计特点Kafka与传…...

Redis7基础篇(八)

redis集群 是什么 能干吗 集群算法-分片-槽位slot redis集群的槽位slot redis集群的分片 分片和槽位的优势 槽位映射的解决方案 上面的三个方案分别对应了小厂 中厂 大厂 哈希槽取余分区 缺点 一致性哈希算法分区 小总结 哈希槽分区 经典面试题 这里说的redis是ap而不是cp的 …...

Tauri简介

在Tauri应用中&#xff0c;Rust和前端&#xff08;通常是基于Web技术如React、Vue或Angular&#xff09;之间的交互是一个核心特性&#xff0c;它允许开发者利用Rust的强大功能和性能&#xff0c;同时保持前端开发的灵活性和丰富的生态系统。这种交互主要通过Tauri提供的API桥接…...

JavaWeb——MVC架构模式

一、概述: MVC(Model View Controller)是软件工程中的一种 软件架构模式 &#xff0c;它把软件系统分为模型、视图和控制器三个基本部分。用一种业务逻辑、数据、界面显示分离的方法组织代码&#xff0c;将业务逻辑聚集到一个部件里面&#xff0c;在改进和个性化定制界面及用户…...

Excel求和方法之

一 SUM&#xff08;&#xff09;&#xff0c;选择要相加的数,回车即可 二 上面的方法还不够快。用下面这个 就成功了 三 还有一种一样快的 选中之后&#xff0c;按下Alt键和键&#xff08;即Alt&#xff09;...

Windows Server 域控制服务器安装及相关使用

目录 1.将客户机加入域 2.安装域控制器 3.新建域用户 4.设置用户登录时间&#xff0c;账户过期时间 5.软件分发 ​编辑 6.换壁纸 7.OU与GPO的概念 域为集中控制&#xff0c;拿下域控是拿下目标的关键 以Windows Server 2022为例 1.将客户机加入域 前提&#xff1a;客…...

linux基础命令(超级详细)

Linux 系统提供了丰富的命令行工具&#xff0c;用于各种文件操作、系统管理和网络配置等任务。以下是一些常用的 Linux 基础命令&#xff1a; 一、 文件和目录操作 1. ls: 列出目录内容 ls 列出当前目录的文件和目录 ls -l 以长格式列出文件和目录&#xff0c;包…...

大模型笔记之-XTuner微调个人小助手认知

前言 使用XTuner 微调个人小助手认知 一、下载模型 #安装魔搭依赖包 pip install modelscope新建download.py内容如下 其中Shanghai_AI_Laboratory/internlm2-chat-1_8b是魔搭对应的模型ID cache_dir/home/aistudio/data/model’为指定下载到本地的目录 from modelscope im…...

用TensorFlow实现线性回归

说明 本文采用TensorFlow框架进行讲解&#xff0c;虽然之前的文章都采用mxnet&#xff0c;但是我发现tensorflow提供了免费的gpu可供使用&#xff0c;所以果断开始改为tensorflow&#xff0c;若要实现文章代码&#xff0c;可以使用colaboratory进行运行&#xff0c;当然&#…...

IT计算机软件系统类毕业论文结构指南:从标题到结论的全景视角

一、背景 在快速发展的IT和人工智能领域&#xff0c;毕业论文不仅是学术研究的重要成果&#xff0c;也展示了学生掌握新技术和应用的能力。随着大数据和智能系统的复杂性增加&#xff0c;毕业设计&#xff08;毕设&#xff09;的论文章节安排变得尤为关键。一个结构清晰、内容详…...

leetcode27:移除元素(正解)

移除元素 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k&#xff0c;要通过此题&#xff0c;您需要执行以下操作&#xf…...

docker部署nginx--(部署静态文件和服务)

文档参考 1、http://testingpai.com/article/1649671014266 2、下载nginx docker pull nginx:alpine 然后启动nginx&#xff0c; docker run --rm -it -p 9192:80 nginx:alpine /bin/sh 关闭容器后&#xff0c;自动删除该容器 进入后&#xff0c;启动nginx, nginx进行curl h…...

websocket的介绍及springBoot集成示例

目录 一、什么是Websocket 二、Websocket特点 三、WebSocket与HTTP的区别 四、常见应用场景 五、SpringBoot集成WebSocket 1. 原生注解 2. Spring封装 一、什么是Websocket WebSocket 是一种在单个 TCP 连接上进行 全双工 通信的协议&#xff0c;它可以让客户端和服务器…...

软件测试-自动化测试

自动化测试 测试人员编写自动化测试脚本&#xff0c;维护并解决自动化脚本问题 自动化的主要目的就是用来进行回归测试 回归测试 常见面试题 ⾃动化测试能够取代人工测试吗&#xff1f; ⾃动化测试不⼀定⽐人工测试更能保障系统的可靠性&#xff0c;⾃动化测试是测试⼈员手…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

【题解-洛谷】P10480 可达性统计

题目&#xff1a;P10480 可达性统计 题目描述 给定一张 N N N 个点 M M M 条边的有向无环图&#xff0c;分别统计从每个点出发能够到达的点的数量。 输入格式 第一行两个整数 N , M N,M N,M&#xff0c;接下来 M M M 行每行两个整数 x , y x,y x,y&#xff0c;表示从 …...