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

输入含多种空白字符时如何一次性读取全部内容?getline仅读单行

C++读取包含换行等空白字符的全部输入到单个字符串

你当前的getline(cin, str)只会读取到第一个换行符为止,所以只能获取第一行内容。要读取所有输入内容,分两种场景处理:

1. 读取到输入流结束(EOF)

当输入没有明确终止标记,需要读取用户输入的所有内容直到结束(比如Unix下按Ctrl+D,Windows下按Ctrl+Z),可以用以下两种方式:

方式一:循环逐行拼接

这种方式可以灵活控制是否保留换行符:

#include <iostream>
#include <string>

using namespace std;

int main() {
    string fullStr;
    string line;
    // 循环读取每一行,直到输入流结束
    while (getline(cin, line)) {
        fullStr += line + '\n'; // 保留每行的换行符,若不需要可去掉+'\n'
    }
    // 移除最后多余的换行符(如果存在)
    if (!fullStr.empty()) {
        fullStr.pop_back();
    }
    cout << fullStr;
    return 0;
}

方式二:直接读取整个流缓冲区

这种方式更简洁,会一次性读取所有字符(包括换行、空格等所有空白):

#include <iostream>
#include <string>
#include <iterator>

using namespace std;

int main() {
    // 用流迭代器读取整个输入流到字符串
    string fullStr((istreambuf_iterator<char>(cin)), istreambuf_iterator<char>());
    cout << fullStr;
    return 0;
}

2. 读取到指定终止符(如示例中的"END")

如果输入以特定字符串(比如"END")作为结束标记,可在循环中判断终止条件:

#include <iostream>
#include <string>

using namespace std;

int main() {
    string fullStr;
    string line;
    while (getline(cin, line)) {
        // 读到"END"时停止读取
        if (line == "END") {
            break;
        }
        fullStr += line + '\n';
    }
    if (!fullStr.empty()) {
        fullStr.pop_back();
    }
    cout << fullStr;
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 22:23:15