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

【C++】cin的处理过程

使用cin进行输入时,程序将输入视为一系列的字节,其中每个字节都被解释为字符编码。不管目标数据
类型是什么,输入一开始都是字符数据——文本数据。然后,cin对象负责将文本转换为其他类型。

为说明这是如何完成的,来看一些处理同一个输入行的代码。

假设有如下示例输入行:

38.5  19.2

来看一下使用不同数据类型的变量来存储时,cin是如何处理该输入行的。

char类型

char ch;
cin >> ch;

输入行中的第一个字符被赋给ch。在这里,第一个字符是数字3,其字符编码(二进制)被存储在变量ch中。输入和目标变量都是字符,因此不需要进行转换。注意,这里存储的数值3,而是字符3的编码。执行上述输入语句后,输入队列中的下一个字符为字符8,如果有下一个输入,则下一个输入操作将对其进行处理。

int

int n;
cin >> n;

在这种情况下,cin将不断读取,直到遇到非数字字符。也就是说,它将读取3和8,这样句点将成为输入队列中的下一个字符。cin通过计算发现,这两个字符对应数值38,因此将38的二进制编码复制到变量n中。

注意: 这里有的人认为是进行了强转,将一个输入的浮点型数据转换成了这种整型数据,这样理解是错误的。

double

double x;
cin >> x;

在这种情况下,cin将不断读取,直到遇到第一个不属于浮点数的字符。也就是说,cin读取3、8、句点和5,使得空格成为输入队列中的下一个字符。cin通过计算发现,这四个字符对应于数值38.5,因此将38.5的二进制编码(浮点格式)复制到变量x中。

char数组

char word[50];
cin >> word;

在这种情况下,cin将不断读取,直到遇到空白字符。也就是说,它读取3、8、句点和5,使得空格成为输入队列中的下一个字符。然后,cin将这4个字符的字符编码存储到数组word中,并在末尾加上一个空字符。这里不需要进行任何转换。

使用char数组来存储输入

char word[50];
cin.getline(word,50);

在这种情况下,cin将不断读取,直到遇到换行符(示例输入行少于50个字符)。所有字符都将被存储到数组word中,并在末尾加上一个空字符。换行符被丢弃,输入队列中的下一个字符是下一行中的第一个字符。这里不需要进行任何转换。

即整数被转换为数字字符序列,浮点数被转换为数字字符和其他字符组成的字符序列(如284.53或
−1.58E+06)。字符数据不需要做任何转换。

http://www.lryc.cn/news/10277.html

相关文章:

  • 读取Sentinel和Landsat 压缩包数据,直接进行波段重组、影像裁剪或者匀色镶嵌处理
  • Yakit Web Fuzzer 终极能力强化:热加载 Fuzz
  • Qt新手入门指南 - 如何创建模型/视图(三)
  • 【Spring】手动实现简易AOP和IOC
  • EasyExcel的使用
  • 基础篇(-1)-java特点、JDK、JRE、JVM区别、字节码编译、跨平台、程序运行
  • 【网络编程】Java快速上手InetAddress类
  • 小小bat-day1-自动文件上传
  • 2023年美赛D题公布
  • Gartner 再度预测2023低代码趋势,真的会赚钱吗?
  • Zebra ZT410 ZT411 导入中文字体
  • nextTick 的使用和原理(面试题)
  • Hudi系列19:Hudi写入模式
  • Kubernetes安全
  • 全国进入裁员潮,到底是大厂难混?还是我技不如人?
  • 电子技术——内部电容效应以及MOS与BJT的高频响应模型
  • 华为OD机试题 - 出租车计费(JavaScript)
  • Django框架进阶版
  • 2023美赛F题全部代码+数据+结果 数学建模
  • Java基础-logback日志使用
  • kaggle竞赛-宠物受欢迎程度(赛题讲解与数据分析)
  • Go语言基础知识学习笔记
  • Python3 错误和异常
  • 程序人生 - 学习和分享
  • 基于树莓派的智能家居项目整理
  • 《洛阳冬冷》
  • YOLOv5简介
  • 【面向对象语言三大特性之 “继承”】
  • Ambari2.7.5集群搭建详细流程
  • 房产|1月全国70城房价出炉!疫情放开后你关心的城市房价有何变化