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

如何使用C++标准输入流cin读取字符串?

C++ cin 读取字符串三种完整方式、区别、踩坑解决

前置准备

头文件必须包含:

#include<iostream>#include<string>// 使用std::string必备usingnamespacestd;

方法1:cin >> 字符串变量(最简单,不能读空格

原理

提取运算符>>自动跳过开头空白(空格、回车、Tab),读到下一个空白字符立刻停止

示例

string s;cout<<"输入单词:";cin>>s;cout<<s<<endl;

输入:Hello World
输出:HelloWorld留在缓冲区未读取。

适用场景

只读取不含空格的单词、账号、编号等短文本。

方法2:getline(cin, string)读取整行(包含空格)

原理

读取缓冲区所有字符,直到遇到换行符\n;换行符丢弃,不会存入字符串。

基础示例

string s;cout<<"输入一句话:";getline(cin,s);cout<<s<<endl;

输入:I love C++,完整输出整行。

重大坑:cin >>getline混用空行问题

执行cin >> num输入数字按下回车后,换行符残留在输入缓冲区,下一次getline会直接读到空字符串。

错误示例
intnum;cin>>num;string s;getline(cin,s);// 直接读取空,跳过输入
解决方案:cin.ignore()清空残留换行
intnum;cin>>num;cin.ignore(numeric_limits<streamsize>::max(),'\n');// 清空整行剩余字符string s;getline(cin,s);

需要额外头文件:

#include<limits>

方法3:C风格字符数组读取(char[])

3.1 cin >> char[](同样截断空格)

charbuf[100];cin>>buf;

3.2 cin.getline(char数组, 长度) 读带空格字符串

charbuf[100];// 最多读取99个字符,末尾自动补'\0'cin.getline(buf,sizeof(buf));

方法4:cin.get() 逐字符读取字符串(进阶)

循环读取单个字符,手动拼接,可完全自定义终止条件:

string s;charch;while((ch=cin.get())!='\n'){s+=ch;}cout<<s;

四种读取方式对比

方式是否支持空格终止条件适用场景
cin >> string❌ 不支持空格/回车无空格短字符
getline(cin, str)✅ 支持整行换行符句子、带空格文本
cin.getline(char[], N)✅ 支持整行换行/长度上限C语言字符数组
cin.get()循环拼接✅ 完全自定义自己设定结束符精细控制输入

常用实操模板

模板1:单纯读取带空格一行

string line;getline(cin,line);

模板2:先读数字,再读取带空格句子(无空行bug)

#include<iostream>#include<string>#include<limits>usingnamespacestd;intmain(){intage;cin>>age;cin.ignore(numeric_limits<streamsize>::max(),'\n');string name;getline(cin,name);cout<<age<<" "<<name;return0;}

模板3:连续读取多行文本

string s;while(getline(cin,s)){cout<<s<<endl;}
http://www.jsqmd.com/news/1108752/

相关文章:

  • 【Vibe Coding从入门到精通】第13篇:团队协作中的Vibe Coding——从个人利器到团队武器
  • 构建小程序全自动安全审计体系:从原理到实践
  • 为什么机电维修师傅都在换 18KV 塑钢头绝缘鞋?轻便防护两不误
  • 2026年中盘点:什么八字排盘软件好用?第三方测评拆到排盘底层
  • OpenCore Legacy Patcher:让旧Mac重获新生,体验最新macOS的终极指南
  • CRM系统通俗讲解,一文理清客户管理工具全部知识
  • 惠普tank1005,tank2606,tank2604,tank1020开机报错ER08闪黄灯,加了2包粉问题没有修好,最终解决方法是通过er08清除软件修好 ,几分钟就自己修好了,省480元维修费
  • 类脑AI落地实战:从脉冲神经网络到工业故障预测
  • FOC无刷电机控制方案:高精度与高效率的实现
  • 适配2-5串锂电!XSP30升降压快充芯片功能与布线解析
  • 2026年第三届“聚合獬豸杯”全国电子数据取证大赛(计算机部分)详细版Wireup
  • 网络流量安全测试实战:从漏洞扫描到渗透测试的纵深防御策略
  • FBA退货换标海外仓系统哪个靠谱?易境通WMS逆向物流解决方案
  • 2026年主流AI API接口平台横评:价格、延迟、模型覆盖对比
  • MediaPipe TouchDesigner插件深度解析:GPU加速实时机器学习视觉处理架构设计
  • STM32与PCF8591的I2C通信与数据采集设计
  • 构建泰拉瑞亚模组生态:tModLoader深度开发指南
  • YOLOv10模型改进-Backbone改进-第58篇:YOLOv10改进策略【Backbone】| MobileNetV3 Backbone替换
  • 信贷风控模型选型实战:逻辑回归为何仍是压舱石
  • STM32F401RE与TC78H660FTG的无刷电机驱动方案解析
  • 终极Switch游戏文件管理神器:NSC_BUILDER完整使用教程
  • KLayout终极指南:如何快速掌握开源版图设计工具
  • 告别演讲超时:这款智能PPT计时器让你成为时间管理大师
  • STM32L152RE与TPS65263的嵌入式电源管理方案
  • 如何免费解锁WeMod专业版?Wand-Enhancer终极使用指南
  • 企业诉讼案件管理系统怎么选:诉讼、外聘律师、风险预警和数据看板
  • 从笔记小白到效率高手:OneMore插件让OneNote生产力翻倍
  • 终极WeMod增强工具:Wand-Enhancer完整实用指南
  • YAKIT进阶实战:从工具使用到自动化渗透测试工作流构建
  • longcat接入ccswitch获取余量查询