【发布时间】:2021-02-14 06:53:15
【问题描述】:
我正在做一个玩具项目。基本上,它是一组用于制作在终端中运行的游戏的类和函数。我想使用 ANSI 转义码来更改文本颜色、样式、背景颜色等。我正在尝试从文本文件中输入形状和颜色。我将它们存储在一个类中,该类包含一个字符串数组(用于形状)和一个二维字符串数组(用于颜色)。当我对颜色进行硬编码时,它可以正常工作,但是当我从文件(使用 ifstream)输入它们时,它只是输出代码并且对文本样式没有任何作用。
有没有办法在不编写单独的函数来处理输入的代码的情况下解决这个问题?
加载函数:
void charbox::load(std::string path, std::string path2) {
std::ifstream txt;
std::string s;
txt.open(path);
if (txt.is_open() == 0) {
std::cout << "ERROR 404, " << path << " NOT FOUND!\n";
}
while (std::getline(txt,s)) {
frame.push_back(s);
}
txt.close();
txt.open(path2);
if (txt.is_open() == 0) {
std::cout << "ERROR 404, " << path2 << " NOT FOUND!\n";
}
std::vector <std::string> v(frame[0].size(), "");
color.resize(frame.size(), v);
for (int i = 0, height = frame.size(); i < height; i++) {
for (int j = 0, width = frame[i].size(); j < width; j++) {
txt >> color[i][j];
}
}
txt.close();
}
班级:
class charbox {
public:
std::vector <std::string> frame;
std::vector <std::vector <std::string>> color;
void load(std::string path, std::string path2);
charbox(int p_width, int p_height);
charbox(){};
private:
};
当我输出时:
std::cout << <some object>.color[<some index>][<some index>] << "test\n";
我希望根据输入改变“测试”的颜色,但它只是以纯文本的形式输出代码。
path和path2中的文件示例:
路径包含:
[][]
[][]
path2 包含:
\033[1;31;41m \033[1;31;41m \033[1;31;41m \033[1;31;41m
\033[1;31;41m \033[1;31;41m \033[1;31;41m \033[1;31;41m
提前致谢!
附:我正在运行 Linux(特定于 Windows 的解决方案不适合我)。
【问题讨论】:
-
C 和 C++ 是不同的语言。在您的问题中显示一些minimal reproducible example(一些带有
main的代码以及示例输入和所需输出)。我能够在RefPerSys开源C++项目中输出ANSI转义码;从其源代码中汲取灵感 -
如果没有minimal reproducible example 或任何代码,就不可能说出来
-
创建一个,例如
ANSI_colors.h带有所需颜色类等的标头,并包含信息而不是从文件中读取信息。 -
您从文件中读取这些代码的方式似乎犯了一些错误。但是如果没有看到你的任何代码,怎么会有人知道那个错误是什么?要回答您实际提出的问题,是的,有可能。
标签: c++ c++11 console-application