从文件中读取文本时接收数值和字母

Receiving numeric values and letters when reading text from file

提问人:Иоанн Федоренко 提问时间:10/10/2023 最后编辑:TylerHИоанн Федоренко 更新时间:10/18/2023 访问量:79

问:

当我尝试从文件中读取文本时,我的输出中会收到数值和字母,而不仅仅是文本。

这是我的:GreenLang.cpp

#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;
        fileRead.open(filePath);
        while (!fileRead.eof()) {
            fileRead.get(codeElement);
            scan(codeElement);
        }
        fileRead.close();
    }
    
    void scan(char code) {
        std::cout << code << std::endl;
        std::cout << std::to_string(code);
    }
};

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

    return 0;
}

这是我 code.gl:

Hello, World!

我的输出:

H
72e
101l
108l
108o
111,
44
32W
87o
111r
114l
108d
100!
33!
33

为什么会出现这些数值,如何获取文本值?

C++ IFStrate

评论

0赞 Some programmer dude 10/10/2023
首先:请尽量保持构造函数的小型和简单。他们应该将对象初始化为已知状态,但不能更多。保持文件读取。
0赞 Some programmer dude 10/10/2023
其次,请阅读 为什么 iostream::eof 在循环条件中(即 while (!stream.eof())) 被认为是错误的?
0赞 Some programmer dude 10/10/2023
第三,你真正想做什么?你为什么要使用?你希望它能回来什么?std::to_string
0赞 Thomas Matthews 10/10/2023
最好使用 而不是 。std::stringchar *

答:

1赞 Zubair Amin 10/10/2023 #1

如果只想打印字符而不打印其 ASCII 值,则可以从扫描功能中删除该行:std::cout << std::to_string(code);

  void scan(char code) {
        std::cout << code << std::endl;
    }
4赞 Some programmer dude 10/10/2023 #2

没有以 a 作为参数的 std::to_string 重载。char

相反,它将被转换为 ,并且您将获得值的字符串表示形式。intint

如果你看一个ASCII表,你会看到,例如 是字符的数值整数表示形式。72'H'

如果要获取包含该字符的字符串,则有一个 std::string 构造函数重载,允许:

std::cout << "String of only one single character: " << std::string(1, code) << '\n';