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

如何从cin读取内容直到输入流为空,实现成对读取行的需求

C++ 从cin中成对读取全量行的修复方案

问题根因

你当前的代码存在两个核心问题:

  1. 循环条件str1 == "" | str1 != ""是恒成立的无效逻辑,且未判断getline的读取状态,无法正确识别文件结束的时机
  2. 没有对读取失败(到达文件末尾)的场景做处理,无法区分空行和读取结束的状态

正确实现

#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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:48:03