std::cin详解

C++中使用 std::cin 将输入读取到 std::string 中 阅读详情

std::cin

cin>>

cin>> 用于连续从键盘中读取想要的数据以,空格;tab;换行作为分隔符

cin是C++编程语言中的标准输入流对象,即istream类的对象。cin主要用于从标准输入读取数据,这里的标准输入,指的是终端的键盘。此外,cout是流的对象,即ostream类的对象,cerr是标准错误输出流的对象,也是ostream 类的对象。这里的标准输出指的是终端键盘,标准错误输出指的是终端的屏幕。

在理解cin功能时,不得不提标准输入缓冲区。当我们从键盘输入字符串的时候需要敲一下回车键才能够将这个字符串送入到缓冲区中,那么敲入的这个回车键(\r)会被转换为一个换行符\n,这个换行符\n也会被存储在cin的缓冲区中并且被当成一个字符来计算!比如我们在键盘上敲下了123456这个字符串,然后敲一下回车键(\r)将这个字符串送入了缓冲区中,那么此时缓冲区中的字节个数是7 ,而不是6。

需要注意

  • cin>>等价于cin.operator>>(),即调用成员函数operator>>()进行读取数据。
  • 当cin>>从缓冲区中读取数据时,若缓冲区中第一个字符是空格、tab或换行这些分隔符时,cin>>会将其忽略并清除,继续读取下一个字符,若缓冲区为空,则继续等待。但是如果读取成功,字符后面的分隔符是残留在缓冲区的,cin>>不做处理。
  • 不想略过空白字符,那就使用 noskipws 流控制。比如cin>>noskipws>>input;

从标准输入读取一行字符串的方法

getline读取一行

C++中定义了一个在std名字空间的全局函数getline,因为这个getline函数的参数使用了string字符串,所以声明在了<string>头文件中了。

getline利用cin可以从标准输入设备键盘读取一行,当遇到如下三种情况会结束读操作:1)到文件结束,2)遇到函数的定界符,3)输入达到最大限度。

函数原型有两个重载形式:

istream& getline ( istream& is, string& str);//默认以换行符结束
istream& getline ( istream& is, string& str, char delim)

例如

#include <iostream>
#include <string>

using namespace std;

int main() {
  int flag;
  cout << "please cin a number" << endl;
  cin >> flag;
  cout << "flag: " << flag << endl;

  cin >> flag;
  cout << "flag: " << flag << endl;
  if (flag == 1)
    cout << "true" << endl;
  else {
    cout << "false" << endl;
  }

  string data;
  getline(cin, data);
  cout << "data: " << data << "data size is :" << data.size() << endl;
  return 0;
}

输出

please cin a number
1 2 3 4 5 4
flag: 1
flag: 2
false
data:  3 4 5 4data size is :8

tip: cin会从输入缓冲区读取,以空格,tab,回车为界限,而getline会把空格,tab读进来

gets,fgets,scanf与字符串的故事 1.gets gets是从标准输入设备读取字符串的函数,函数原型 char * gets ( char * str );  刚开始学习C语言时觉得gets这个函数相当的好用,因为他比scanf写起来要短,而且可以输入有空格的字符串。但是越往后学就会发现,在C语言中用GCC编译使用了gets函数的源文件,编译器会给警告。 warning: implicit declaration of fun... 阅读详情

相关推荐

STM32 C++实战:重构标准输入输出流std::cin与std::cout的嵌入式适配

本文详细介绍了在STM32上重构C++标准输入输出流std::cin与std::cout的嵌入式适配方法。通过重定向技术,开发者可以在嵌入式系统中实现高效的调试输出和用户输入交互,提升代码可移植性和开发效率。文章涵盖了基础重定向、带缓冲区的优化方案、非阻塞式输入实现以及资源消耗分析,为STM32开发者提供了实用的技术指南。

weixin_30908941的博客 198

C++ std::cin

c++ cin 的一些用法

笔记 4128

C++14时代,别再死磕gets()了!手把手教你用cin.getline()和getline()安全读入带空格的字符串

本文深入探讨了C++14中如何安全读取带空格的字符串,推荐使用cin.getline()和getline()替代不安全的gets()函数。通过五大实战技巧和竞赛案例,帮助开发者避免缓冲区溢出等安全隐患,提升代码安全性和可维护性,特别适合信息学竞赛选手和C++开发者参考。

weixin_30715523的博客 348

std::cin C++标准输入流

用了那么久的c++,都没有深入去学习一下c++的标准输入流(cin),标准输出流的(cout)的用法,一般只是简单的使用去获取一个字符串或者几个整型输入。但是发现如果遇到了比较复杂的输入,这简单的三板斧就不够用了,需要考虑空白符(空格,tab,换行符等)的影响。而c++又提供了cin.get,cin.getline,std::getline,等不同的类方法和全局函数,没深入的了解的咋一看就有点晕,这几个函数到底有啥区别?又有哪些坑?下面是我自己的一些补充。

hacker_lpy的博客 1720

std::cin 完全指南:掌握C++标准输入流的原理、技巧与避坑

本文全面介绍了C++中std::cin输入流的使用方法。主要内容包括:1)基础数据类型输入操作;2)字符串处理的getline函数;3)输入验证与错误处理;4)高级控制技巧如cin.get()和流状态管理;5)实战案例(学生管理系统和CSV解析器);6)性能优化技巧;7)常见问题解决方案。重点强调了正确处理输入缓冲区、验证输入合法性以及选择合适的输入方法,通过大量代码示例展示了从基础到高级的输入处理技术,帮助开发者构建健壮的用户输入系统。

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 206

C++ 输入输出语法及其用法

除了标准输入输出,C++ 还提供了文件输入输出的功能,可以读写文件中的数据。在 C++ 中,标准输入流(std::cin)用于接收用户的输入,标准输出流(std::cout)用于向控制台输出数据。C++ 还提供了格式化输出的功能,可以按照特定的格式将数据输出到控制台或文件中。使用格式化输出,可以控制数据的对齐、精度、位数等。然后,我们从输入文件中读取一个整数,并将读取到的整数写入到输出文件中。需要注意的是,文件输入输出操作可能会涉及到文件是否成功打开的检查,以确保文件操作的顺利进行。

TechRoarX的博客 152

C++ 标准输入流 std::cin 完整详解

cin >>优点:简单自动解析数字、字符串;缺点:空格截断,不能读整行;优点:读取整行含空格;缺点:需处理cin >>遗留换行;cin.get()优点:读取空格、回车;缺点:只能单字符读取。

2601_95865500的博客 253

VASP能带计算避坑指南:从CHGCAR读取失败到成功解决的全过程

本文深度解析VASP能带计算中常见的“CHGCAR读取失败”报错,并提供从静态自洽到非自洽计算的全流程避坑指南。核心解决方案包括使用CONTCAR替代POSCAR、调整SYMPREC参数以处理对称性判定问题,并推荐利用vaspkit工具自动化生成输入文件,确保计算流程稳健高效。

weixin_29245767的博客 771

数据快速读取 cin scanf getchar比较(包含freopen std::ios::sync_with_stdio详解 程序执行时间 )...

数据快速读取 cin scanf getchar比较(包含freopen std::ios::sync_with_stdio详解 程序执行时间 ) int read() { char c=getchar();int num=0; for(;!isdigit(c);c=getchar()); for(;isdigit(c);c=getchar()) num...

StoneXieAC的博客 377

手把手教你在Keil/IAR中移植SEGGER_RTT组件(避坑指南+性能对比)

本文详细介绍了在Keil/IAR开发环境中移植SEGGER RTT调试组件的完整流程与优化技巧。通过对比传统串口调试,SEGGER RTT凭借零硬件占用、高速传输和双向交互等优势,显著提升嵌入式开发效率。文章包含配置步骤、性能调优方案及常见问题解决方案,是嵌入式开发者必备的实用指南。

y7z8a的博客 243

杂记 | 使用keycloak实现SSO单点登录(新手向,概念、原理、逻辑、详细步骤、难点解释)

使用keycloak实现SSO单点登录(概念、原理、逻辑、详细步骤、难点解释)

野生猿林仔的博客 2万+

cin.fail()== true

cin.fail() = true

rainsssssss的博客 352

ArcGIS小白必看:如何用3D Analyst工具将二维点线秒变三维模型(附详细步骤)

本文为ArcGIS初学者提供了利用3D Analyst工具将二维点、线数据快速转换为三维模型的完整指南。详细讲解了基于属性字段和数字高程模型(DEM)两种核心方法,并附上从数据准备、工具操作到三维场景可视化与问题排查的详细步骤,帮助用户轻松实现从平面到立体的空间数据建模。

nft7creator的博客 141

C++14时代,别再死磕gets了!用cin.getline和getline搞定带空格字符串输入(附NOIP避坑指南)

本文深入探讨了C++14标准下如何安全高效地处理带空格字符串输入,重点介绍了替代传统gets函数的cin.getline和getline方法。通过对比分析字符数组与string类的实现差异,并结合信息学奥赛一本通2046题的替换字母实例,为NOIP参赛者提供了实用的避坑指南和最佳实践建议。

weixin_30855099的博客 289

华为OD最新机试真题-池化资源共享

摘要:该问题要求管理n台设备的资源池,处理资源申请和释放操作。申请操作需返回满足条件且剩余资源最少的设备ID,释放操作需将指定申请的资源归还。采用线段树数据结构维护各设备当前最大可用资源值,支持快速查询和更新。线段树实现了单点修改、区间最大值查询以及查找最左满足条件的节点功能。算法时间复杂度为O((n+m)logn),空间复杂度O(n),适用于大规模操作。提供了C++、Java和Python三种实现方案。

面试高手的博客 326

24、水下传感器网络中混合LEACH协议与遗传算法获取路由节点

本文提出了一种结合遗传算法与LEACH协议的混合路由方案,用于提升水下无线传感器网络(UWSN)的能量利用效率和数据传输稳定性。通过遗传算法优化簇头选择与路径规划,有效避免节点过早死亡,减少能量消耗,在200个节点场景下显著提升网络寿命。相比传统LEACH协议,该方案具有更高的能量利用率、更强的环境适应性,并支持传输历史记录与并行传输序列。实验结果显示,该方案在总能量为2000焦耳时剩余能量达75.6%,远优于LEACH的34.8%能耗表现。适用于海洋监测、石油平台监控及水下灾害预警等复杂环境应用。

i8j9k0l1的博客 112

【C/C++】 stdin对字符输入的心得和经验总结(快速输入字符串)

std::ios::sync_with_stdio(false); 用这个语句,取消cin,cout与stdio的同步,说白了就是提速,效率基本与scanf和printf一致,然后就可放心的使用cin,cout了。 在使用C/C++编写控制台应用或acm竞赛的时候,I/O方式无非是标准输入输出,特别是acm竞赛,就本人来说,由C语言入门,输入方式还只会scanf,自从学了C++,便深深地被 c...

逆风笑的博客 4366

从 RAP OData 到可交付的 SAP Fiori 应用:部署与授权全链路实战笔记

摘要:本文探讨了RAP开发中常见的交付误区,指出开发者预览(FEAP)并非可部署应用,强调从服务发布到业务应用落地的完整链路。文章详细对比了不同部署路径(ABAP/BTP),解析权限管理关键点(SAP_BR_DEVELOPER的临时性),并提供了标准授权组合方案(IAM+业务目录+角色)。通过"发运跟踪"案例,展示了从开发验证到生产部署的全流程,特别提醒注意开发环境与生产环境的权限差异,避免"开发机正常、生产机403"的典型问题。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1402

C++ 中 std::cin、std::cin.getline、std::getline几种标准输入之间的区别

几种标准输入之间的区别 istream is is 输入时, 遇见空格、Tab、以及回车符会跳过。 测试代码: #include<iostream> using namespace std; int main() { char first, second; cin >> first >> second; cout << "first: " << first << endl; cout <

qq_38988226的博客 789

6.4 实战项目:基于Agent内核构建Code Review智能体

本文介绍了一个基于Agent内核构建的智能Code Review系统实战项目。系统采用多Agent协作架构,包含代码质量分析、安全漏洞识别、性能优化建议等核心功能模块。文章详细展示了系统架构设计,采用协调器Agent管理多个专业Agent协同工作,并提供了基础Agent框架和协调器Agent的TypeScript实现代码。项目结合了AI Agent核心原理和多Agent协作机制,实现了自动化的代码审查流程,能够生成详细的审查报告,帮助开发者提升代码质量和安全性。

yonggeit的博客 3111

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C++知识点6

如果你。

用来自己学习,复习 416

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C++ getline原理与工程实践:解决输入缓冲区陷阱

getline是C++标准库中用于流式提取字符的核心函数,其本质并非简单‘读一行’,而是从输入流中持续读取直至指定分隔符(默认\n)并自动丢弃该分隔符。这一机制决定了它与cin>>的关键差异:后者跳过前导空白但残留后续字符,导致缓冲区污染。理解输入流状态、分隔符语义及缓冲区残留问题,是避免‘读不到第一行’‘空字符串返回’等高频故障的技术基础。在配置解析、日志处理、交互式CLI等真实场景中,结合cin.ignore、stringstream和错误检查的鲁棒模式,才能释放getline的工程价值。

weixin_29281915的博客 348

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C++入门指南:从零开始,做一名优秀的程序员

C++兼容C语言的绝大多数语法,所以C语言的"Hello World"在C++中也能运行。C++引入了命名空间(namespace),就像给每个人分配了一个"家庭",在同一个家庭内可以有同名的人,但不同家庭之间不会冲突。在C语言中,如果两个文件定义了同名的函数或变量,编译器就会报错,就像两个同学都叫"小明",老师很难区分谁是谁。这就像C++自带了一个"智能助手",能自动判断你输出的是什么类型,不需要你手动指定格式。,因为它可能引起名字冲突。代码语言:javascript。代码语言:javascript。

2501_94114815的博客 83

【C++编程】C++入门(一)---(C++关键字 | 命名空间 | C++输入输出)

本文介绍了C++编程语言的基础知识,重点讲解了命名空间和输入输出功能。作为C语言的扩展,C++引入了面向对象编程思想并优化了C语言的设计缺陷。文章详细阐述了命名空间(namespace)的概念及其三种使用方法,通过实例说明了如何解决C语言中常见的命名冲突问题。在输入输出方面,对比了C++的iostream库与C语言的stdio.h,解释了cout/cin的工作原理和使用方法,并指出C++输入输出自动识别类型的优势及其潜在精度问题。最后,文章简要比较了C++与C语言在输入输出效率上的差异,为后续学习缺省参数和

liqi070115的博客 977
上一篇: 01背包问题的变种问题(奇行种)
下一篇: YoloV5标签格式
黑猫爱小鹿
博客等级 码龄8年 1万+粉丝 205原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值