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

C++代码执行时getline输入被跳过的问题求解,附完整可复现代码示例

问题根因
  • 执行cin >> repeat读取整数时,输入流仅提取数值内容,用户输入结束按下的换行符\n会残留在输入缓冲区中。
  • getline默认以换行符作为读取终止标识,执行时会直接读取到残留的换行符,返回空字符串,表现为输入步骤被跳过。
修复方案

方案1:主动丢弃缓冲区残留的换行符

在cin >> repeat语句后新增一行cin.ignore(),主动消耗掉缓冲区残留的换行符即可。修改后对应代码片段如下:

cout << "Repititions? ";
cin >> repeat;
cin.ignore(); // 丢弃缓冲区中残留的换行符
cout << "Message? ";
getline(cin, message);

如果需要更稳妥的处理,避免缓冲区存在其他多余残留字符,可以使用以下写法,清空缓冲区到换行符为止的所有内容,该写法需要额外引入<limits>头文件:

cin.ignore(numeric_limits<streamsize>::max(), '\n');

方案2:统一输入方式

避免混合使用cin >>格式化输入和getline行输入,所有输入统一使用getline读取后,再按需做数据类型转换,也可以彻底规避这类输入缓冲区残留导致的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:36:04