使用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
相关产品推荐
相关产品推荐

