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

在Visual Studio 2022的C++中如何用cin读取换行作为输入

解决cin读取字符串时捕获换行/空输入的问题

首先明确:cin >> string 的默认行为是跳过所有前置空白字符(包括换行、空格、制表符),只读取到下一个空白字符为止,所以单纯输入换行时它会一直等待有效字符。要实现捕获换行或把空输入存入字符串,可采用以下几种方法:

方法一:使用getline读取整行(含空行)

getline(cin, str) 会读取从当前位置到换行符的所有内容(包括空行),且会将换行符从输入流中移除(不存入字符串)。若要把换行符本身存入字符串,可手动追加:

#include <iostream>
#include <string>
using namespace std;

int main() {
    string str;
    // 读取整行,包含空行
    getline(cin, str);
    // 若为空行(仅输入换行),将换行符存入字符串
    if (str.empty()) {
        str = "\n";
    }
    // 验证结果
    cout << "读取到的内容:[" << str << "]" << endl;
    return 0;
}

此方法能直接处理所有行输入,空行场景下可按需将\n存入字符串。

方法二:修改cin输入格式,不跳过空白字符

通过noskipws操纵符关闭cin跳过空白的默认行为,即可读取到换行符,适合需要精确控制每个输入字符的场景:

#include <iostream>
#include <string>
using namespace std;

int main() {
    string str;
    char c;
    // 关闭跳过空白的默认行为
    cin >> noskipws;
    // 读取第一个字符(含换行)
    cin >> c;
    if (c == '\n') {
        str = "\n";
    } else {
        // 读取后续字符直到换行
        str += c;
        while (cin >> c && c != '\n') {
            str += c;
        }
    }
    // 恢复默认的跳过空白行为(避免影响后续输入)
    cin >> skipws;
    cout << "读取到的内容:[" << str << "]" << endl;
    return 0;
}

方法三:将空输入转为"null"字符串

若需求是把纯换行输入转为"null"字符串,用getline即可快速实现:

#include <iostream>
#include <string>
using namespace std;

int main() {
    string str;
    getline(cin, str);
    // 空行时赋值为"null"
    if (str.empty()) {
        str = "null";
    }
    cout << "读取到的内容:[" << str << "]" << endl;
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:02:10