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,提问作者Иоанн Федоренко
相关产品推荐
相关产品推荐

