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

【和春笋一起学C++】文本输入与读取

前言:前面学习了while语句后,下面用while语句实现一个重要的功能,逐字符的读取键盘输入的字符序列,并输出到显示屏上。

准备知识:

C++的输入输出包含以下3方面的内容:

  1. 对系统指定的标准设备的输入和输出。即从键盘输入数据,输出到显示器屏幕。这种输入输出称为标准的输入输出,简称标准I/O。
  2. 以外存为对象进行输入和输出。例如从磁盘文件输入数据,数据再输出到磁盘文件。以外存文件为对象的输入输出称为文件的输入输出,简称文件I/O。
  3. 对内存中指定的空间进行输入和输出。通常指定一个字符数组作为存储空间(实际上可以利用该空间存储任何信息)。这种输入输出称为字符串输入输出,简称串I/O。

目录

1. 方法一

2. 方法二

3. 方法三

4. iostream类的成员函数get

重载函数1:int get();

重载函数2:int get(char& ch);

cin.get(ch)与cin.get()对比


1. 方法一

使用cin对象和流提取运算符“>>”读取。

#include <iostream>
#include <cstring>
using namespace std;
int main()
{char ch;int count = 0;cout << "Enter characters, enter # to quit: \n";cin >> ch;while (ch != '#'){cout << ch;count++;cin >> ch;}cout << endl << count << " characters read\n";return 0;
}

程序分析:程序功能是逐个读取输入的文本并在遇到'#'字符时停止读取输入。结束循环的条件是最后读取的一个字符是'#',该条件通过在循环之前读取一个字符进行初始化,并在循环体结尾读取下一个字符进行更新。输出如下: 

 从输出结果看,程序读取到了'#'前除空格以外的所有字符,总共检测了14个字符,有4个空格被忽视了。原因在于cin读取char值时与读取其他基本类型一样,cin将忽略空格和换行符。

另外,程序为何可以输入一串字符序列,而不是单个字符,并且程序输入'#'字符后为何还可以输入字符。这是因为键盘输入的文本内容会先被cin对象存放在缓冲区,当用户按下回车键后他输入的内容才会发送给程序,当一串字符序列发送给程序后,程序再逐个字符的检测是否为'#'字符,如果是'#'字符,就退出循环并输出检测过的所有字符。

2. 方法二

使用iostream类的成员函数get()逐字符的读取字符序列可以避免方法一中忽视空格的问题。

将方法一中的代码修改如下:

#include <iostream>
#include <cstring>
using namespace std;
int main()
{int count = 0;cout << "Enter characters, enter # to quit: \n";char ch = cin.get();while (ch != '#'){cout << ch;count++;ch = cin.get();}cout << endl << count << " characters read\n";return 0;
}

程序输出如下,可见输出结果中包含了字符序列中的空格,并且最终检测的字符数目也包含了空格。

3. 方法三

还可以使用带参数的get成员函数:

#include <iostream>
#include <cstring>
using namespace std;
int main()
{int count = 0;cout << "Enter characters, enter # to quit: \n";char ch;cin.get(ch);while (ch != '#'){cout << ch;count++;cin.get(ch);}cout << endl << count << " characters read\n";return 0;
}

4. iostream类的成员函数get

get函数在iostream类中有多个重载函数,本文主要介绍无参数的get函数和有一个参数的get函数。

重载函数1:int get();

无参数的get函数,cin.get()表示从指定的输入流(通常是键盘)中提取一个字符(包括空格),如果读取成功,则函数的返回值就是读入的字符,如果遇到文件结束符号(EOF),则返回EOF。

char ch;
ch = cin.get();
if (ch != EOF) {cout << "You entered: " << ch << endl;
} else {cout << "End of file reached." << endl;
}

重载函数2:int get(char& ch);

有1个参数的get函数,其形参是char类型的引用。cin.get(ch)表示从输入流中读取一个字符,并赋给字符变量ch,如果读取成功则函数返回非0值(true),如失败则函数返回0值(false)。cin.get(ch) 更适合用于需要明确知道读取操作是否成功的场合。

char ch;
if (cin.get(ch)) {cout << "You entered: " << ch << endl;
} else {cout << "End of file reached." << endl;
}

cin.get(ch)与cin.get()对比

属性cin.get(ch)ch=cin.get()
传递输入字符的方式赋给参数ch将函数返回值赋给ch
用于字符输入时函数的返回值istream类对象(执行bool转换后为true)int类型的字符编码
到达EOF时函数的返回值istream类对象(执行bool转换后为false)EOF

使用带参数的get函数更符合对象方式,一方面因为其返回值是istream对象,意味着可以将它们拼接起来使用,另一方面还可以通过返回值判断字符读取是否成功。如将字符串"game"4个字符分别赋值给四个字符变量:ch1,ch2,ch3,ch4。可以用如下形式实现:

#include <iostream>
#include <cstring>
using namespace std;
int main()
{int count = 0;cout << "Enter characters, enter # to quit: \n";char ch1, ch2, ch3, ch4;cin.get(ch1).get(ch2).get(ch3).get(ch4);cout << "ch1="<<ch1 << "\n" << "ch2=" << ch2 << "\n" <<"ch3=" << ch3 << "\n" << "ch4=" << ch4 << "\n" << endl;return 0;
}

输出如下: 

 

相关文章:

【和春笋一起学C++】文本输入与读取

前言&#xff1a;前面学习了while语句后&#xff0c;下面用while语句实现一个重要的功能&#xff0c;逐字符的读取键盘输入的字符序列&#xff0c;并输出到显示屏上。 准备知识&#xff1a; C的输入输出包含以下3方面的内容&#xff1a; 对系统指定的标准设备的输入和输出。即…...

D类音频应用EMI管理

1、前言 对于EMI&#xff0c;首先需要理解天线。频率和波长之间的关系&#xff0c;如下图所示。   作为有效天线所需的最短长度是λ/4。在空气中&#xff0c;介电常数是1&#xff0c;但是在FR4或玻璃环氧PCB的情况下&#xff0c;介电常数大约4.8。这种效应会导致信号在FR4材…...

第N8周:使用Word2vec实现文本分类

文章目录 一、数据预处理1.加载数据2.构建词典3.生成数据批次和迭代器 二、模型构建1.搭建模型2.初始化模型3.定义训练与评估函数 三、训练模型1.拆分数据集并运行模型 四、总结 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&a…...

100天精通Python(爬虫篇)——第113天:爬虫基础模块之urllib详细教程大全

文章目录 1. urllib概述2. urllib.request模块 1. urllib.request.urlopen()2. urllib.request.urlretrieve()3. urllib.request.Request()4. urllib.request.install_opener()5. urllib.request.build_opener()6. urllib.request.AbstractBasicAuthHandler7. urllib.request.…...

光谱相机与普通相机的区别

一、成像目的 普通相机&#xff1a;主要目的是记录物体的外观形态&#xff0c;生成人眼可见的、直观的二维图像&#xff0c;重点在于还原物体的形状、颜色和纹理等视觉特征&#xff0c;以供人们进行观赏、记录场景或人物等用途。例如&#xff0c;拍摄旅游风景照片、人物肖像等…...

Mysql数据 新增、修改和删除操作时,这些变化如何被转换为Kafka消息?

Mysql数据 新增、修改和删除操作时,这些变化如何被转换为Kafka消息? 为了在FlinkCDC中配置MySQL同步到Kafka,并采用debezium-json数据格式,我们需要了解当执行新增、修改和删除操作时,这些变化如何被转换为Kafka消息。下面我们将详细介绍这些变化情况,并提供具体的数据样…...

《Python 机器视觉:开启智能视觉新时代》

《Python 机器视觉&#xff1a;开启智能视觉新时代》 一、Python 机器视觉的基石&#xff08;一&#xff09;关键库的强大力量&#xff08;二&#xff09;环境搭建的便捷路径 二、核心功能与奇妙应用&#xff08;一&#xff09;图像的奇幻处理&#xff08;二&#xff09;目标检…...

uniapp实现为微信小程序扫一扫的功能

引言 随着微信小程序的快速发展,越来越多的开发者开始关注和学习微信小程序的开发。其中,微信小程序的扫一扫功能是非常常用且实用的功能之一。通过扫描二维码,用户可以获取到相关的信息或者实现特定的功能。 正文 在过去,开发者需要使用微信开发者工具以及相关的开发文档…...

【微信小程序】4plus|搜索框-历史搜索 | 我的咖啡店-综合实训

升级版1-清空全部的再次确认 实现功能: 历史搜索记录展示-历史搜索记录展示10条点击跳转-点击历史搜索记录可同步到搜索框并自动搜索全部删除-可一次性全部删除历史搜索记录全部删除-有再次确认操作展示 进行搜索后留下搜索记录 点击垃圾桶图标,显示【清空全部】 点击【清…...

使用FFmpeg进行拉流和推流操作

FFmpeg是一款强大的多媒体处理工具&#xff0c;可以用于视频的录制、转换、推流和拉流等操作。下面将详细介绍如何使用FFmpeg进行拉流和推流操作。 1. FFmpeg推流操作 推流是将本地的音视频流推送到流媒体服务器上&#xff0c;例如主播将本地电脑上的画面推流到直播平台的流媒…...

Unity微信小游戏接入开放数据域

demo地址&#xff1a;https://github.com/wechat-miniprogram/minigame-unity-webgl-transform/tree/main/Demo/Ranking 官方说明&#xff1a; https://github.com/wechat-miniprogram/minigame-unity-webgl-transform/blob/main/Design/OpenData.md 准备一个Canvas&#xff0c…...

Spring Boot的开发工具(DevTools)模块中的热更新特性导致的问题

问题&#xff1a; java.lang.ClassCastException: class cn.best.scholarflow.framework.system.domain.entity.SysUser cannot be cast to class cn.best.scholarflow.framework.system.domain.entity.SysUser (cn.best.scholarflow.framework.system.domain.…...

Elasticsearch安装和数据迁移

Elasticsearch安装和数据迁移 Elasticsearch安装 下载并解压Elasticsearch 首先下载Elasticsearch的tar.gz文件&#xff0c;并将其解压&#xff1a; wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.8.2-linux-x86_64.tar.gz tar -xzf elastics…...

Numpy指南:解锁Python多维数组与矩阵运算(下)

文章一览 前言一、排序1.1 numpy.sort1.2 numpy.argsort1.3 numpy.lexsort 二、数组操作2.1 数组元素迭代2.2 数值舍入计算2.3数值取整2.4 数组去重2.5 数组拼接2.6 数组行列交换 三、文件读写3.1 np.fromfile() 读文件3.2 np.loadtxt() 读文件3.3 用 csv 模块逐行处理 CSV 格式…...

路由器刷机TP-Link tp-link-WDR5660 路由器升级宽带速度

何在路由器上设置代理服务器&#xff1f; 如何在路由器上设置代理服务器&#xff1f; 让所有连接到该路由器的设备都能够享受代理服务器的好处是一个不错的选择&#xff0c;特别是当需要访问特定的网站或加速网络连接的时候。下面是一些您可以跟随的步骤&#xff0c;使用路由器…...

VB.NET在 Excel 二次开发中的全面应用

摘要&#xff1a; 本文详细阐述了如何运用VB.NET进行 Excel 的二次开发。首先介绍了开发环境的搭建&#xff0c;包括安装 Visual Studio 及引用 Excel 对象库。接着深入探讨了各种基础操作&#xff0c;如创建 Excel 应用程序对象、打开与操作工作簿、处理工作表与单元格数据等。…...

uni-app使用组件button遇到的问题

在HBuilder X工具中新建一个空白项目&#xff0c; 1、新建一个about页 然后在pages.json文件里加上路由 2、然后看下导航的方法&#xff0c;发现找不到navigateTo方法 参考&#xff1a;button | uni-app官网 第3行和第4行的代码倒是没问题的&#xff0c;第5行的代码有问题执行…...

如何在Express.js中处理异常情况?

在 Express.js 中处理异常情况是确保应用程序稳定性和安全性的重要方面。未处理的错误可能会导致应用崩溃或暴露敏感信息给用户。以下是几种常见的处理异常的方法&#xff1a; 1. 使用 try...catch 和 async/await 对于异步操作&#xff0c;如数据库查询、文件系统访问等&…...

CKA认证 | Day7 K8s存储

第七章 Kubernetes存储 1、数据卷与数据持久卷 为什么需要数据卷&#xff1f; 容器中的文件在磁盘上是临时存放的&#xff0c;这给容器中运行比较重要的应用程序带来一些问题。 问题1&#xff1a;当容器升级或者崩溃时&#xff0c;kubelet会重建容器&#xff0c;容器内文件会…...

ArcGIS Pro地形图四至角图经纬度标注与格网标注

今天来看看ArcGIS Pro 如何在地形图上设置四至角点的经纬度。方里网标注。如下图的地形图左下角经纬度标注。 如下图方里网的标注 如下为本期要介绍的例图&#xff0c;如下&#xff1a; 图片可点击放大 接下来我们来介绍一下 推荐学习&#xff1a;GIS入门模型构建器Arcpy批量…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

6.9本日总结

一、英语 复习默写list11list18&#xff0c;订正07年第3篇阅读 二、数学 学习线代第一讲&#xff0c;写15讲课后题 三、408 学习计组第二章&#xff0c;写计组习题 四、总结 明天结束线代第一章和计组第二章 五、明日计划 英语&#xff1a;复习l默写sit12list17&#…...