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

使用char类型时cin.getline()异常:输入12345后为何跳过后续读取?

问题原因及解决方法

核心原因

当输入12345给arr2时,后续的cin.getline(arr3,6,'#')被跳过是因为cin进入了错误状态:

  • 调用的cin.getline(arr2,5,'#')中,第二个参数5限制了最多读取4个有效字符(需预留1个位置存储字符串结束符\0)。
  • 输入的12345有5个字符,函数读取前4个字符1234存入arr2,剩余的5留在输入缓冲区。
  • 由于未遇到终止符#就达到最大读取长度,cin会设置failbit错误标志,此时输入流处于错误状态,后续所有输入操作都会直接跳过。

解决方法

方法1:调整读取长度

将cin.getline(arr2,5,'#')的第二个参数改为10(匹配arr2的数组大小),这样能容纳输入的12345,不会触发错误状态:

cin.getline(arr2,10,'#');

方法2:清除错误状态并清空缓冲区

在第二个cin.getline之前,先清除cin的错误标志,再忽略缓冲区剩余的字符:

#include <limits> // 需要包含此头文件

// ...

cin.getline(arr2,5,'#');
cin.clear(); // 清除错误标志
cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 忽略缓冲区剩余字符直到换行
cin.getline(arr3,6,'#');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 23:48:40