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

C++读取文件文本时输出混杂ASCII数值与字符,如何获取纯文本?

问题原因分析
  • 输出中的数值是字符对应的ASCII码值:你的scan函数里调用了std::to_string(code),而code是char类型,std::to_string会把字符转换为它对应的ASCII整数数值(比如'H'的ASCII码是72,所以输出H后会跟着72),这就是混杂数值的直接原因。
  • 末尾出现重复字符和数值:while (!fileRead.eof())的写法有缺陷——当读取到文件最后一个字符后,fileRead.eof()仍然为false,循环会多执行一次,此时fileRead.get(codeElement)读取失败,codeElement会保留上一次的取值(也就是最后一个字符'!'),导致重复输出。
解决方法

1. 移除ASCII码输出语句

直接删掉scan函数里的std::cout << std::to_string(code);,这样就只会输出纯字符内容。

2. 修正文件读取循环

把while (!fileRead.eof())改成while (fileRead.get(codeElement)),当读取失败(比如到文件末尾)时,循环会直接终止,避免重复读取最后一个字符。

修正后的完整代码

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

class ScanErrors {
protected:
    char* element;
    char codeElement;
    std::string path;
    std::string source;

public:
    ScanErrors (std::string filePath) {
        std::ifstream fileRead(filePath); // 直接初始化文件流,无需单独调用open
        while (fileRead.get(codeElement)) { // 修正循环条件,避免多读
            scan(codeElement);
        }
        // ifstream对象销毁时会自动关闭文件,无需手动调用close
    }
    
    void scan(char code) {
        std::cout << code; // 直接输出字符,保持原文本格式
        // 若需要每个字符单独换行,可改为std::cout << code << std::endl;
    }
};

int main() {
    ScanErrors scanner("code.gl");
    return 0;
}

预期输出

如果使用std::cout << code;,输出会和原文件内容完全一致:

Hello, World!

如果保留换行输出,会按单个字符分行显示:

H
e
l
l
o
,
 
W
o
r
l
d
!

内容的提问来源于stack exchange,提问作者Иоанн Федоренко

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 04:37:49