C++中cin读取数据原理解析

在网上看别人的博客关于cin的解读,有感而发!解决了我心头的疑惑,所以在此进行记录。

参考博客源地址:(23条消息) cin、cin.get()、cin.getline()、getline()的区别_cin.getline()函数_啊大1号的博客-CSDN博客(23条消息) C++ while(cin>>a) cin输入直到回车结束_while(cin>>)什么时候结束_子木呀的博客-CSDN博客​​​​​​

(23条消息) 在while中使用cin>>a 为条件,注意事项_c++一次性输入多组数据__ dingding_的博客-CSDN博客

欢迎大家去上面博主的文章中了解更多!

输入原理简述:

程序的输入都建有一个缓冲区,即输入缓冲区。每次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据(cin读取数据是从第一个非空白字符开始到下一个空白字符结束)。正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入

比如下面的例子:

void test_input()  
{  string str;  cout<<"cin的测试:"<<endl;  cin>>str;  cout<<str<<endl;  cin>>str;  cout<<str<<endl;  
}  

 

由于cin在遇到空格/tab时,就会停止读取,所以如果我在第一次输入时,利用空格隔开两个字符串,那么cin在第一次取的时候,只会读取前一个字符串,到空格结束,此时缓冲区还保留着前面输入的第二个字符串,那么第二次cin就会直接从缓冲区取残留数据,而不会请求输入

然后来说一下 C++ while(cin>>a) 问题

cin>>a是有返回值的,只要a满足类型条件,就会return true,一直执行下去,而cin会忽略空格或者enter,因此,enter后不会结束循环。只能ctrl+Z。

其实很简单:通过get()判断下一个输入是不是回车就行。

while(cin>>a){...if(cin.get()=='\n') break;
} 

接下来我们来看一个例子:

#include<iostream>
using namespace std;
int main()
{int currVal = 0 , val = 0;if(cin >> currVal){int cnt=1;//统计次数while(cin >> val){if(currVal == val){cnt++;}else{cout << currVal <<" occurs "<<cnt<<" times "<<endl;currVal = val;cnt=1;//重新计算另一个 }} //while循环结束 cout << currVal <<" occurs "<<cnt<<" times "<<endl;//打印最后一个数 }//if循环结束 return 0;
}

测试用例输入1 2 3 4,会发现最后一个4的个数无法统计

这是因为现在程序还卡在while(cin>>val)中,可以选择ctrl+z结束,看下图:​​​​​​​

 

或者增加一行代码:if(cin.get()=='\n') break;

#include<iostream>
using namespace std;
int main()
{int currVal = 0 , val = 0;if(cin >> currVal){int cnt=1;//统计次数while(cin >> val){if(currVal == val){cnt++;}else{cout << currVal <<" occurs "<<cnt<<" times "<<endl;currVal = val;cnt=1;//重新计算另一个 }if(cin.get()=='\n') break;} //while循环结束 cout << currVal <<" occurs "<<cnt<<" times "<<endl;//打印最后一个数 }//if循环结束 return 0;
}

当用例中‘4’被读入val后,cin.get()会得到‘4’后面的‘\n’回车符号,实现while(cin>>a)终止。

以上是我学习过程中的随记,所以写的知识点有点乱,还请各位看官老爷多多包涵!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

马原大题知识点整理

B站上的马原大题知识点 在网上没有找到对应的资料&#xff0c;手打了一份&#xff08;可能会有部分错误&#xff09; 马原大题 文章目录 一、马哲答题考核规律二、马哲答题书写格式三、马哲大题背诵概念&#xff08;一&#xff09;辩证法1、联系观2、发展观3、新事物4、五大基…

研究生复试之专业问答

比较 TCP与 UDP TCP与 UDP都是传输层的协议 , 且都用端口号标识数据所达的进 程。 TCP提供的是面向连接服务 , 提供可靠交付。且具有流量控制 和拥塞控制。可用于可靠要求高的场合如 :SMTP,FTP,HTTP等 。 UDP提供的是无连接服务 , 提供不可靠交付 , 且无确认机制。主要 用于即…

大模型总是「胡说八道」怎么办?手把手教你如何应对!

随着 ChatGPT 的出现&#xff0c;「AI 幻觉」一词被频繁提及。那么&#xff0c;什么是 AI 幻觉&#xff1f;简单来说&#xff0c;就是大模型在一本正经地胡说八道。 不止 ChatGPT&#xff0c;其他大语言模型也经常如此&#xff0c;究其根本是大语言模型在训练的过程中存在数据偏…

美军 AI 无人机 “抗令杀人”?LeCun、吴恩达在线辟谣:假的,是炒作!

整理 | 郑丽媛 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 上周三&#xff0c;近 400 名知名专家共同签署的 22 字声明&#xff0c;令人们将目光再次聚焦 AI 可能带来的风险&#xff0c;有关“AI 可能灭绝人类”的讨论更是甚嚣尘上。 在这种氛围中&#xff0c…

谷歌CEO皮查伊暗示要裁员;华为研发投入位居首位;Android 13首个安全更新|极客头条

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&…

易语言写微信群AI人工智能机器人,自动对话、聊天、发消息

工具我们已经打包好了&#xff0c;关注公众号“花花爱软件”回复“csdn”下载哈。。。。支持一下&#xff0c;码字不易 需要的工具&#xff1a; l 易语言 l 精易模块V8 l 精易助手&#xff0c; 朋友们大家好&#xff0c;我是今天的讲师&#xff0c;花花爱人&#xff0c;今天…

微信小程序实现分享至朋友圈的功能

微信小程序实现分享至朋友圈的功能 微信小程序从基础库 2.11.3 开始&#xff0c;可将小程序页面分享到朋友圈。适用于内容型页面的分享&#xff0c;不适用于有较多交互的页面分享。 1 设置分享状态 小程序页面默认不可被分享到朋友圈&#xff0c;开发者需主动设置“分享到朋友…

微信小程序开启分享给好友及分享朋友圈功能

创建一个空白模板的微信小程序&#xff0c;发布成功后才发现不能分享给好友 及朋友圈 查了下才知道&#xff0c;要有分享功能需要开启。 在小程序首页的里添加以下两个函数 //用户点击右上角分享给好友&#xff0c;要现在分享到好友这个设置menu的两个参数&#xff0c;才可以…

用python 实现朋友圈自动点赞

使用该程序只是为了熟悉pyautogui模块的应用&#xff0c;不是所有圈文该点赞的&#xff0c;请读者慎用&#xff01; 我们需要pyautogui模块&#xff0c;pyautogui是一个纯Python的GUI自动化工具&#xff0c;通过它可以让程序自动控制鼠标和键盘。 1、安装 pip3 install pya…

【基于ESP8266、点灯科技集小爱同学5灯语音控制、本地按键、无线按键、离线语音的灯光控制】

集小爱同学语音控制、本地按键、无线按键、离线语音的灯光控制 电路图 代码 #define BLINKER_WIFI #define BLINKER_MIOT_MULTI_OUTLET //设置为小爱多个插座的模式 #include <Blinker.h> #define BLINKER_PRINT Serial //串口协议库 #define BLINKER_WITHOUT_S…

Blinker接入小爱同学做智能家居RGB灯

如果你有一部非小米手机&#xff0c;怎样连入米家&#xff0c;使用小爱同学语音控制家电呢 此文相关看不懂的知识点 1、esp8266无法下载程序&#xff1a;参考我的另外一篇文章 链接 2、非小米手机小爱同学语音接入 链接 实现功能 小爱同学语音控制客厅灯开关、模式切换、亮度…

chatgpt赋能python:用Python制作游戏

用Python制作游戏 游戏开发一直是计算机编程中最激动人心的领域之一。Python作为一种流行的编程语言&#xff0c;也可以用来制作游戏。在本文中&#xff0c;我们将介绍如何用Python制作游戏&#xff0c;并探讨用Python进行游戏开发的优点和局限性。 游戏开发的优点 Python作…

chatgpt赋能python:用Python编写游戏

用Python编写游戏 Python是一种用于编写各种应用程序的高级编程语言&#xff0c;它易于阅读和编写&#xff0c;并且在不同的操作系统中都具有广泛的使用。使用Python编写游戏可以使游戏开发人员轻松和快速地创建相当复杂的游戏&#xff0c;同时大幅度增强了游戏体验。 为什么…

chatgpt赋能python:Python怎么做3D游戏?

Python怎么做3D游戏? 随着游戏开发技术的不断更新和改进&#xff0c;Python也被越来越多的游戏开发者和爱好者所使用。事实上&#xff0c;Python可以进行3D游戏开发&#xff0c;并且其简单易学、离散记录和良好的结构化编程可以为游戏开发带来诸多便利。因此&#xff0c;本篇…

chatgpt赋能python:如何利用Python做游戏

如何利用Python做游戏 Python是一种流行的编程语言&#xff0c;可以用来做许多不同的事情&#xff0c;包括编写游戏。在这篇文章中&#xff0c;我们将讨论如何使用Python来制作游戏&#xff0c;并介绍如何优化您的游戏以提高搜索引擎排名。 Python中的游戏编程 Python不是专…

AIGC:OpenAI官方版AutoGPT简介

文章目录 [toc]简介一、聊天界面直接加购物车、发推特布洛克曼&#xff1a;是时候了解AGI了 简介 OpenAI官方AutoGPT&#xff0c;要来了&#xff01;就在AutoGPT项目破10万Star之际&#xff0c;OpenAI也放出重磅炸弹&#xff0c;由联合创始人格雷格布洛克曼&#xff08;Greg B…

销售人员必看的书推荐

一本好的有关销售技巧的书籍可以给销售人员指明方向&#xff0c;找到销售的精髓和正确的销售方法。那么怎样才算是一本好的销售书籍呢&#xff1f;都有哪些好的有关销售技巧的书籍呢&#xff1f;笔者凭借多年的销售经验和阅读经历选出了以下7本经典销售书籍&#xff0c;值得每个…

适合企业老板看的书推荐

老板就是一家企业的灵魂与精神领袖&#xff0c;老板的个人素质和能力大小直接决定一家企业最终能够走多远。 要想在这个变化莫测的竞争环境中拔得头筹&#xff0c;企业老板必须要通过大量的阅读来不断提升自己的管理技能与个人职业素养。商战宛如逆水行舟&#xff0c;不进则退…

经商必看的10本书籍推荐

1、《经理人参阅&#xff1a;商业模式与商业思维》 这本书被誉为商业模式的圣经。该书通过可视化工具&#xff0c;包括商业模式画布和价值主张画布&#xff0c;帮助企业家、创业者和经理人创造创新的商业模式。本书通过图表、图像和实例&#xff0c;详细讲解了商业模式的构建方…

投资类书籍推荐书单

这里分享一个我的投资类书籍的书单。书单不长&#xff0c;不过都是挺有特色、非常值得一读的书。大家有好的书籍也欢迎推荐&#xff0c;并简单写一下推荐理由哦。 其中有的书比较枯燥&#xff0c;有的相对容易读。 关于资产配置 《傻瓜式投资》 飞泥翱空 《不落俗套的成功》…