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
原因解析
- cin错误状态触发:当输入的数值超出int类型的取值范围时,
cin >> t执行失败,cin会设置failbit错误标志位,进入错误状态。 - 错误状态下的流操作限制:一旦cin处于错误状态,后续所有输入操作(包括
getline)都会直接被跳过,不会读取任何输入内容。 - 字符串未被修改:因为
getline没有执行实际读取操作,字符串s保持了初始化时的10个&,最终输出初始值。
内容的提问来源于stack exchange,提问作者Rohith chidurala
相关产品推荐
相关产品推荐

