C++初学(18)

news2024/11/24 19:03:09

18.1、读取数字的循环

假设要编写一个将一系列的数字读入到数组中的程序,并允许用户在数组填满之前结束输入。一种方法是利用cin:

int n;
cin>>n;

如果用户输入的是一个单词,而不是一个数字将会怎么样?可能会发生这些情况:

(1)n的值保持不变;

(2)不匹配的输入将被留在输入队伍中;

(3)cin对象中的一个错误标记被设置;

(4)如果被转换为bool类型,对cin方法的调用将返回false

方法返回false意味着可以用非数字输入来结束数字的循环。非数字输入设置错误标记意味着必须充值该标记,程序才能继续读取输入。clear()方法重置错误输入标记,同时也重置文件尾(EOF条件),后面会区分EOF和输入错误的(可能吧)。

现在假设要编写一个程序,来计算平均每天捕获的鱼的重量,这里假设每天最多捕获5条鱼,如果数组被填满或者输入了非数字输入,循环将结束。

#include<iostream>
const int Max = 5;
int main()
{
	using namespace std;
	double fish[Max];  
	cout << "Please enter the weights of your fish." << endl;
	cout << "You may enter up to " << Max
		<< " fish <q to terminate>." << endl;
	cout << "fish #1:";
	int i = 0;
	while (i<Max && cin >> fish[i])
	{
		if (++i < Max)
			cout << "fish #" << i + 1 << ": ";
	}
	double total = 0.0;
	for (int j = 0; j < i; j++)
	{
		total += fish[j];
	}
	if (i == 0)
		cout << "No fish" << endl;
	else
		cout << total / i << " = average weight of "
		<< i << " fish" << endl;
	cout << "Done." << endl;
	return 0;
}

这个程序里面的一个表达式cin>>fish[i]实际上是一个cin方法函数调用,该函数返回cin。如果cin位于测试条件中,则将被转换为bool类型。如果输入成功,则转换后的值为true,否则为false。如果表达式的值为false,则循环结束。

注意一下下面这个代码行:

while(i<Max && cin>>fish[i]){

如果逻辑AND表达式的左侧为false,则C++将不会判断右侧的表达式。在这里,对右侧的表达式进行判定意味着用cin将输入放到数组中。如果i等于Max,则循环将会结束。

下面继续看一个例子加深印象:提供五个分数来计算平均成绩,如果输入不是数字则会要求用户继续输入。

#include<iostream>
const int Max = 5;
int main()
{
	using namespace std;
	int golf[Max];
	cout << "Please enter your golf scores." << endl;
	cout << "You must enter " << Max << " rounds." << endl;
	int i;
	for (i = 0; i < Max; i++)
	{
		cout << "round #" << i + 1 << ": ";
		while (!(cin >> golf[i]))
		{
			cin.clear();
			while (cin.get() != '\n')
				continue;
			cout << "Please enter a number: ";
		}
	}
	double total = 0.0;
	for (i = 0; i < Max; i++)
		total += golf[i];
	cout << total / Max << "= average score "
		<< Max << " rounds" << endl; 
	return 0;
}

这个程序的关键在这里:

while (!(cin >> golf[i]))
		{
			cin.clear();
			while (cin.get() != '\n')
				continue;
			cout << "Please enter a number: ";
		}

如果用户输入数字,则cin的表达式为true,因此将一个值放到数组里;而表达式!(cin >> golf[i])为false,因此结束内部循环。如果用户输入must i?,则与上面相反。进入循环后,第一句的cin.clear()方法重置输入,接下来程序在while循环中使用cin.get()来读取行尾之前的所有输入从而删除这一行的错误输入。

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

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

相关文章

环境变量--永久 & 暂时

Linux 环境变量配置信息 查看环境变量 export 查看系统所有环境变量echo $PATH 查看 PATH 环境变量值 环境变量的命名规则为&#xff1a;变量名变量值 多个变量值之间使用 : 分隔 添加环境变量 环境变量分类 按照作用域分类 环境变量可以简单的分成用户自定义的环境变量…

OJ-0829

题目 示例1 输入&#xff1a; 5 4 1 1 2 3 5 1 2 3 1 4 3 4 5 2 3 4 输出&#xff1a; 3 4 1 2说明:测试用例的优先级计算如下: T1Pf1Pf2Pf31124 T2Pf1Pf4134 T3Pf3Pf4Pf523510 T4Pf2Pf3Pf41236 按照优先级从小到大&#xff0c;以及相同优先级&#xff0c;ID小的先执行的规则&…

#C++ 笔记三

七、异常处理 1.概念 异常是程序在执行期间产生的问题。 C异常是指在程序运行时发生的特殊情况&#xff0c;比如下标越界等。 异常提供了一种转移程序控制权的方式。 2.抛出异常 throw语句的操作数可以是任意表达式&#xff0c;表达式结果的类型决定了抛出异常的类型。 …

Elasticsearch Suggesters API详解与联想词自动补全应用

Elasticsearch Suggesters API详解与联想词自动补全应用 引言Elasticsearch Suggesters1. Term Suggester实现步骤示例 2. Phrase Suggester示例 3. Completion Suggester创建映射和插入数据查询示例 4. Context Suggester示例 Completion Suggester1. 工作原理2. 使用流程3. 使…

企业级低代码解决方案:JNPF平台深度解析

随着数字化转型的不断推进&#xff0c;企业对于快速开发、高效部署和灵活迭代的需求日益增长。低代码开发平台应运而生&#xff0c;成为加速企业应用开发的重要工具。在众多低代码平台中&#xff0c;JNPF凭借其强大的企业级特性脱颖而出&#xff0c;成为众多企业的首选。本文将…

【系统架构设计师-2019年】综合知识-答案及详解

文章目录 【第1题】【第2~3题】【第4题】【第5题】【第6~7题】【第8题】【第9~10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16~17题】【第18~19题】【第20~21题】【第22~23题】【第24~25题】【第26~28题】【第29~30题】【第31~32题】【第33题】【第34题】【第…

Java中三大容器类(List、Set、Map)详解

三大容器介绍 名称结构特点常见实现类List&#xff08;列表&#xff09;由有序的元素序列组成&#xff0c;可以包含重复元素可以通过索引访问元素&#xff0c;插入的顺序与遍历顺序一致ArrayList、LinkedList、VectorMap&#xff08;映射&#xff09;由键值对(Key-Value)组成的…

Axure 9 使用

一、界面初识 二、基础功能 1.菜单栏 1.1文件 新建文件&#xff1a;axure9包含四种文件.rp代表原型文件&#xff0c;.rplib代表元件库文件&#xff0c;.rpteam 团队项目文件 .html 网页文件 偏好设置&#xff1a;备份&#xff0c;需要备份文件再从备份中恢复 创建项目团…

GPT-SoVITS:零样本语音合成AI

GPT-SoVITS 是一种语音合成模型&#xff0c;于 2024 年 2 月 18 日发布。它支持使用参考音频进行零样本语音合成&#xff0c;并且可以进行微调以提高性能。 GPT-SoVITS 的功能特性包括&#xff1a; Zero-Shot TTS&#xff1a;零样本语音合成&#xff0c;输入 5 秒音频样本即可…

57.基于IIC协议的EEPROM驱动控制(4)

&#xff08;1&#xff09;顶层代码&#xff1a; module IIC_EEPROM(input wire clk ,input wire reset_n ,input wire key_r ,input wire key_w ,output wire …

DM一主一实时备一异步备守护集群安装

在前面章节中已经部署了一主一实时备机&#xff0c;此次实施过程中主要添加异步备库。 1. 环境描述 实例详情&#xff1a; 端口详情 2. 关闭主备库守护进程、监视器、数据库实例 [dmdbaray1 ]$ DmWatcherServiceDW stop Stopping DmWatcherServiceDW: …

基于ssm+vue+uniapp的图书管理系统小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

JVM 内存参数

文章目录 引言I JVM基础知识Java 语言是解释型的OpenJDK和Sun/Oracle JDK和hotspot的关系JDK、JRE、JVM 之间的关系JVM基础功能JVM组成JIT:Just In Time CompilerJVM内存区域JVM运行时数据区JVM 堆内存布局II JVM 内存参数常用参数JIT编译参数GC信息打印GC参数III 例子引言 J…

M2BEV

Part 1: 2D 图像编码器 给定 NNN 张大小为 HW3的图像&#xff0c;我们对所有图像使用共享的 CNN 主干网络进行前向传播&#xff0c;例如使用 ResNet&#xff0c;并通过特征金字塔网络&#xff08;FPN&#xff09;创建四级特征 F1,F2,F3,F4。 然后&#xff0c;将这些特征全部上…

Quartus网盘资源下载与安装 附图文安装教程

如大家所了解的&#xff0c;Quartus是一种FPGA设计软件&#xff08;相信理工科的小伙伴&#xff0c;很多都接触或学习过FPGA&#xff09;&#xff0c;旨在为数字电路设计师提供一个高效、便捷的开发环境。它可以帮助用户完成数字逻辑电路的设计、仿真、综合和布局&#xff0c;以…

webpack4手动搭建Vue项目

小满视频 很多解释使用通义灵码搜的,通义灵码的搜索结果也是有错误的全程使用pnpm包管理工具&#xff0c;和npm的用法基本一样 学习总结 1. 多看看webpack官网 2. webpack的作用&#xff1a;配置一堆东西&#xff0c;达到运行程序的目的 3. 无论什么东西都转成js&#xff0c;…

什么是CSRF跨站请求伪造

CSRF&#xff08;跨站请求伪造&#xff0c;Cross-Site Request Forgery&#xff09;是一种网络攻击&#xff0c;攻击者通过伪造用户的身份&#xff0c;诱使用户在已认证的 Web 应用上执行非预期的操作。CSRF 攻击的风险在于它能够利用用户的身份认证状态&#xff0c;从而执行恶…

app逆向1-实战里常见东西

幕布链接&#xff1a;app逆向1-实战里常见东西 - 幕布

JVM性能监控实用工具jconsole与jvisualvm

jdk小工具jconsole与jvisualvm&#xff0c;jvisualvm为升级版的jconsole&#xff1b;通过命令行启动&#xff0c;可监控本地和远程应用。 推荐使用&#xff1a;jvisualvm jconsole使用 1.直接命令 jcondole 打开窗口&#xff0c;选择我们要查看的进行 连接后可看到面板 jvisu…

4岁患儿玩耍误伤眼内起迷“障”,耽误多年成都爱尔公益救助手术焕清晰

近日&#xff0c;成都爱尔眼科医院收治了一名来自西藏的7岁小患者小多。小多是由父亲带到医院的&#xff0c;可惜两人都不会汉语&#xff0c;医护人员与他们的交流依靠着孩子父亲拨打的亲戚电话&#xff0c;在电话中一句一句的翻译终于厘清病情原委。 据说&#xff0c;3年前小多…