You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

cin输入整数溢出后getline无法正常输入的原因探究

输入超出int范围后getline行为异常的原因分析

问题现象

  • 当输入给int类型变量t的值在int取值范围内时,后续getline能正常读取输入的文本行;
  • 当输入值超出int范围时,getline读取失败,字符串s保持初始的10个&字符。

相关代码

cin >> t;

string s(10, '&');
getline(cin, s);
cout << s << endl;

测试场景

正常场景

输入:

100
hey hi

输出:

hey hi

异常场景

输入:

1234567891011
hey hi

输出:

&&&&&&&&&&

预期输出应为:hey hi

原因解析

  1. cin错误状态触发:当输入的数值超出int类型的取值范围时,cin >> t执行失败,cin会设置failbit错误标志位,进入错误状态。
  2. 错误状态下的流操作限制:一旦cin处于错误状态,后续所有输入操作(包括getline)都会直接被跳过,不会读取任何输入内容。
  3. 字符串未被修改:因为getline没有执行实际读取操作,字符串s保持了初始化时的10个&,最终输出初始值。

内容的提问来源于stack exchange,提问作者Rohith chidurala

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 14:37:42