如何从cin读取内容直到输入流为空,实现成对读取行的需求
C++ 从cin中成对读取全量行的修复方案
问题根因
你当前的代码存在两个核心问题:
- 循环条件
str1 == "" | str1 != ""是恒成立的无效逻辑,且未判断getline的读取状态,无法正确识别文件结束的时机 - 没有对读取失败(到达文件末尾)的场景做处理,无法区分空行和读取结束的状态
正确实现
#include <iostream> #include <string> using namespace std; int main() { string str1, str2; while (true) { str1.clear(); str2.clear(); bool hasRead1 = static_cast<bool>(getline(cin, str1)); bool hasRead2 = static_cast<bool>(getline(cin, str2)); // 仅当两次读取都失败时才终止循环 if (!hasRead1 && !hasRead2) { break; } // 此处写入你的业务处理逻辑,空行会自动保存为"",读取失败的行也默认是"" } return 0; }
逻辑说明
- 每次循环先清空两个字符串,保证未读取到内容时默认值就是
"" - 通过
getline的返回值判断读取状态:返回false代表已到达文件末尾,没有读到新内容 - 只要有任意一次读取成功(包括读到空行)就会进入业务处理,完全覆盖两行全空、单空单有效、两行全有效、末尾存在奇数行的所有场景
内容的提问来源于stack exchange,提问作者AndyT
相关产品推荐
相关产品推荐

