C++输入cin详解

C++ cin的使用,看这一篇就够了 1 C++输入输出综述 C++ IO首先建立在为Unix环境开发的原始库函数上;ANSI C正式承认这个库时,将其称为标准输入/输出包; IO相关类定义在头文件iostream和fstream,这些类不是正式语言定义的组成部分,cin,istream都不是关键字。 1.1 流和缓冲 (1)流简介: C++程序将输入和输出看作字符流;对于输入来说,程序从输入流中抽取字符,对于输出来说,程序向输出流中插入字符; 输入流可以来自键盘、存储设备或者其他程序;输出流可以输出至显示器、打印机、存储设备或者其他程序。 阅读详情

输入原理:

程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入

#1:

复制代码
#include <iostream>
using namespace std;
int main()
{
    char str[8];
    cin.getline(str, 5);
    cout<<str<<endl;
    cin.getline(str, 5);
    cout<<str<<endl;
    return 0;
}
复制代码

 

测试:

abcdefgh (回车)

abcd (输出) 

(输出-换行)

【分析】之所以第一次输入完后直接程序就结束了,而不是进行第二次输入,是因为第一次多输入的数据还残留在缓存区中,第二次输入就直接从缓存区中提取而不会请求键盘输入,以下探讨几种常见的输入方式:

一. cin>>

该操作符是根据后面变量的类型读取数据。

输入结束条件 :遇到Enter、Space、Tab键。

对结束符的处理 :丢弃缓冲区中使得输入结束的结束符(Enter、Space、Tab)

#2:

复制代码
#include <iostream>
using namespace std;
int main()
{
   char str1[10], str2[10];
   cin>>str1;
   cin>>str2;
   cout<<str1<<endl;
   cout<<str2<<endl;
   return 0;
}
复制代码

测试:

abcd efgh

输出:

abcd

efgh

【分析】第一次读取字符串时遇到空格则停止了,将abcd读入str1,并舍弃了空格,将后面的字符串给了第二个字符串。这证明了cin读入数据遇到空格结束;并且丢弃空格符;缓冲区有残留数据,读入操作直接从缓冲区中取数据。

二.cin.get(数组名,长度,结束符)

其中结束符为可选参数,读入的字符个数最多为(长度-1)个,结束符规定结束字符串读取的字符,默认为ENTER

若要读取字符,直接cin.get(char ch)或ch=cin.get()即可

读取字符的情况:

输入结束条件:Enter键

对结束符处理:不丢弃缓冲区中的Enter

cin.get() 与 cin.get(char ch)用于读取字符,他们的使用是相似的,

即:ch=cin.get() 与 cin.get(ch)是等价的。

#3:

复制代码
#include <iostream>
using namespace std;
int main()
{
  char c1, c2;
   cin.get(c1);
   cin.get(c2);
    cout<<c1<<" "<<c2<<endl; // 打印两个字符
    cout<<(int)c1<<" "<<(int)c2<<endl; // 打印这两个字符的ASCII值
    return 0;
}
复制代码

 

测试一输入:

a[Enter]

输出:

a

97 10

【分析】会发现只执行了一次从键盘输入,显然第一个字符变量取的’a', 第二个变量取的是Enter(ASCII值为10),这是因为该函数不丢弃上次输入结束时的Enter字符,所以第一次输入结束时缓冲区中残留的是上次输入结束时的Enter字符!

测试二输入:

a b[Enter]

输出:

a

97 32

【分析】显然第一个字符变量取的’a', 第二个变量取的是Space(ASCII值为32)。原因同上,没有丢弃Space字符。

读取字符串的情况:

输入结束条件:默认Enter键(因此可接受空格,Tab键),可在第三个参数上自定义结束符

对结束符处理:丢弃缓冲区中的Enter

#4:

复制代码
#include <iostream>
using namespace std;
int main ()
{
  char ch, a[20];
  cin.get(a, 5 , 'd');
  cin>>ch;
  cout<<a<<endl;
  cout<<(int)ch<<endl;
  return 0;
}
复制代码

 

测试一输入:

12345[Enter]

输出:

1234

53

【分析】第一次输入超长,字符串按长度取了"1234",而’5′仍残留在缓冲区中,所以第二次输入字符没有从键盘读入,而是直接取了’5′,所以打印的ASCII值是53(’5′的ASCII值)。

测试二输入:

12d45[Enter]

输出:

12

d

【分析】第二次输出为d,说明自定义结束符时不丢弃缓冲区中的结束符

三.cin.getline()

cin.getline(数组名,长度,结束符) 大体与 cin.get(数组名,长度,结束符)类似。

区别在于:

cin.get()当输入的字符串超长时,不会引起cin函数的错误,后面的cin操作会继续执行,只是直接从缓冲区中取数据。但是cin.getline()当输入超长时,会引起cin函数的错误,后面的cin操作将不再执行。

#5:

复制代码
#include <iostream>
using namespace std;
int main ()
{
  char ch, a[20];
  cin.getline(a, 5);
  cin>>ch;
  cout<<a<<endl;
  cout<<(int)ch<<endl;
  return 0;
}
复制代码

 

测试输入:

12345[Enter]

输出:

1234

-52

【分析】与cin.get()的例子比较会发现,这里的ch并没有读取缓冲区中的5,而是返回了-52,这里其实cin>>ch语句没有执行,是因为cin出错了!cin的错误处理下次介绍。

                                                                                                                            转载自 ————————http://www.cnblogs.com/A-Song/archive/2012/01/29/2331204.html

C++中使用cin将输入读取到基本类型变量中 阅读详情

相关推荐

深入解析EXI协议在ISO15118-2命令测试中的编解码实践

本文深入探讨了EXI协议在ISO15118-2车桩通信标准中的关键作用与实践方法。EXI编解码测试是确保通信准确性与效率的核心环节,文章详细介绍了从搭建测试环境、选择工具库到编写完整测试代码的全过程,并分析了结果差异的常见原因与调试技巧,为电动汽车充电系统的开发者提供了实用的技术指南。

potato的博客 1048

c++中cin详解(所有程序均亲测可运行,超有用,超详细!!!)

原文链接:https://blog.youkuaiyun.com/k346k346/article/details/48213811 1.cin简介 cin是C++编程语言中的标准输入流对象,即istream类的对象。cin主要用于从标准输入读取数据,这里的标准输入,指的是终端的键盘。此外,cout是输出流对象,即ostream类的对象,cerr是标准错误输出流的对象,也是ostream 类的对象。这里的标准...

Hcaroline 1万+

智能音箱开发者必看:CEVA-BX vs Cadence HiFi音频DSP实战选型指南(附功耗对比表)

本文深入对比了CEVA-BX和Cadence HiFi两大音频DSP架构在智能音箱开发中的性能差异,涵盖语音唤醒、多麦克风阵列处理等核心场景。通过实测数据和功耗对比表,为开发者提供选型参考,帮助优化产品性能和能效表现。

weixin_29309213的博客 227

【C++杂项】cin的详细用法

cin的主要用法

wlisontj的博客 7472

CPU性能优化实战:寄存器重命名如何解决指令冲突(附3种实现方案对比)

本文深入解析了CPU性能优化中的关键技术——寄存器重命名,详细阐述了其如何通过物理寄存器堆(PRF)和重命名映射表(RAT)解决WAW、WAR、RAW等指令冲突,从而释放超标量处理器的并行潜力。文章重点对比了基于ROB、ARF扩展和统一PRF三种主流实现方案的设计权衡、电路代价与功耗影响,并探讨了现代处理器中并行重命名与状态恢复的实战机制。

weixin_29252171的博客 268

Marin说PCB之LPDDR5的布线注意事项--01

以上就是本期所有内容了,有些是通用的LPDDR5的设计准则,有的是针对单板的设计规则,严格意义说是没有哪一种规则是完全适用的LPDDR5的 通用规则的,不同的单板可能板厚,板材,层数,SOC以及DDR的型号都是不同的,一般的做法就是严格按照SOC手册上的LPDDR5的要求加上仿真同事给的建议修改优化就好了,我们下期文章不见不散。我们知道想要做好一个LPDDR颗粒,需要考虑的是因素有很多例如,电源完整性,信号完整性,层叠的设计,布局的摆放,布线的合理规划,去耦电容的摆放等等。

weixin_45223454的博客 3163

C++中cin的详细用法

1.cin简介 cin是C++编程语言中的标准输入流对象,即istream类的对象。cin主要用于从标准输入读取数据,这里的标准输入,指的是终端的键盘。此外,cout是流的对象,即ostream类的对象,cerr是标准错误输出流的对象,也是ostream 类的对象。这里的标准输出指的是终端键盘,标准错误输出指的是终端的屏幕。 在理解cin功能时,不得不提标准输入缓冲区。当我们从键盘输入

zoukangdlut的博客 1万+

U8采购入库单CO接口开发实战:加载、新增与删除操作详解

本文详细解析了用友U8采购入库单CO接口的开发实战,重点介绍了加载、新增与删除三大核心操作的实现方法。通过C#代码示例和实际项目经验,帮助开发者高效处理采购入库单,提升企业供应链管理效率。文章还涵盖了环境配置、异常处理、性能优化等关键技巧,适合U8二次开发人员参考。

weixin_33462927的博客 375

C++之输入(cin)详解

1、cin:          输入操作的原理,程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入,这就是例子中为什么会出现输入语句失效的原因!           ci

松狮 4480

【无人机项目实战】第三章:fast_planner工程解读(附C++代码)

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、规划系统运行逻辑【业务部分】1.Fast_planner_node.cpp【程序入口】功能代码实现2.kino_replan_fsm.cpp【状态机转移】功能代码实现KinoReplanFSM::init()函数订阅目标点回调函数订阅里程计回调函数检查路径规划是否成功【重要】执行状态机FSM定时器回调函数【重要】判断目标点是否有障碍物或者是轨迹执行过程中是否有障碍物的回调函数3

qq_35635374的博客 1万+

【StarRocks】-- DATETIME 与 TIMESTAMP 区别详解

本文详细解析了StarRocks中DATETIME/DATETIMEV2与TIMESTAMP的区别及使用场景。DATETIME系列存储人类可读时间,不携带时区;TIMESTAMP实际指Unix时间戳,建议用BIGINT存储。关键差异包括:精度选择(DATETIMEV2支持微秒级)、时区处理(仅函数计算时影响)、存储方式等。针对不同场景提供选型建议:单时区展示用DATETIMEV2,跨时区计算用BIGINT存储Epoch。特别强调与MySQL迁移时的注意事项,并给出常见问题解决方案和最佳实践清单,包括统一入口

欢迎来到我的博客,一起探索代码里的世界! 500

C++输入cin应用详解

输入原理: 程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入 一:cin>> 1)该操作符是根据后面变量的类型读取数据。 输入结束条件 :遇

samwangzhibo 2万+

基于 YOLOv26 的陶瓷产品缺陷检测系统:智能视觉质检方案

本文提出了一种基于YOLOv26深度学习模型的陶瓷产品智能缺陷检测系统。该系统针对陶瓷生产中的裂纹、气泡、釉面缺陷等8类常见质量问题,采用YOLOv26目标检测算法实现高精度自动化检测。系统架构包含数据采集、预处理、YOLOv26检测和后处理四个模块,具有多类别分类、实时推理和强鲁棒性等技术优势。文章详细介绍了数据预处理与增强方法,并提供了Python代码实现示例。该方案可显著提升陶瓷产品质量检测效率,替代传统人工检测方式,为陶瓷制造业提供智能化质检解决方案。

一键难忘的博客 788

C++cin详解及清空输入缓冲区

输入原理: 程序的输入都有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin对象直接从输入缓冲区中取数据。正因为cin对象是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin对象会直接取得这些残留数据而不会请求键盘输入 一. cin>> 该操作符是根据后面变量的类型读取数据。 输入结束条件 :遇到E

selina8921的博客 5万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

C++ cin输入流详解

http://see.xidian.edu.cn/cpp/biancheng/view/252.html

suishicity的专栏 729

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

上一篇: C++输入cin详解
下一篇: [PHP]date函数参数
PO8OP
博客等级 码龄12年 3粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值