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

如何用C++读取文本文件、移除所有换行符并输出到控制台?

嘿,我来帮你解决这个问题!你的代码目前只处理了空格字符,没把换行符(还有Windows系统里的回车符)算进去,咱们来调整一下就能实现需求了。

首先先说说原代码里的两个小问题:

  • 用while (!mfile.eof())读取文件容易踩坑——因为eof()标志是在读取失败后才会被设置,这会导致你最后多读一个无效字符。
  • 过滤逻辑只排除了空格' ',没处理换行符'\n'和回车符'\r'(Windows下的换行是\r\n组合,这俩都要去掉)。

下面是修改后的完整代码,我还做了一些可读性和健壮性的优化:

#include <fstream>
#include <string>
#include <iostream>

using namespace std;

int main() {
    fstream mfile;
    string content = "";
    char c;

    // 打开目标文件
    mfile.open("pin.txt");
    if (mfile.is_open()) {
        // 更安全的读取方式:只要成功读取到字符就继续循环
        while (mfile.get(c)) {
            content += c;
        }
        mfile.close(); // 读完记得关闭文件
    } else {
        cout << "无法打开文件 pin.txt,请检查文件路径!" << endl;
        return 1;
    }

    string result = "";
    // 用范围for循环遍历每个字符,代码更简洁
    for (char ch : content) {
        // 这里如果只想移除换行符(保留空格),就删掉 != ' ' 的判断
        if (ch != '\n' && ch != '\r') {
            result += ch;
        }
    }

    // 输出处理后的内容
    cout << result << endl;
    return 0;
}

核心修改点说明:

  • 读取逻辑优化:把while (!mfile.eof())改成while (mfile.get(c)),这样只要get()成功读取到字符,循环就继续,避免了多读无效字符的问题。
  • 换行符过滤:在判断条件里加入了'\n'(Unix/Linux/macOS的换行符)和'\r'(Windows的回车符),确保所有换行相关的字符都被移除。如果你想保留空格只删换行,只需要去掉条件里的!= ' '即可。
  • 增加错误处理:如果文件打不开,会给出提示并退出程序,不会继续执行后续逻辑。
  • 代码可读性提升:用范围for循环代替传统的索引循环,变量名也更清晰(比如把word改成content,remove_space改成result)。

这样修改后,程序就能正确读取文件内容并移除所有换行符,输出到控制台啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:07:57