我想改變控制檯中文本的顏色。C++ ansi轉義碼不顯示顏色到控制檯
我們應該用一個配置文件來讀取ANSI轉義代碼:
這是在我的文件
red \033[0;31m #red
blue \033[0;34m #blue
green \033[0;32m #green
grey \033[0;37m #grey
這裏是我的代碼:
#include <iostream>
#include <sstream>
#include <iomanip>
#include <string>
#include <fstream>
#include <map>
using namespace std;
int main(int argc, char * argv[]){
string file = "config.txt";
string line = "";
string tag = "";
string ansi = "";
map <string, string> m;
if(argc == 2){
file = argv[1];
}
ifstream in(file, ios_base::in | ios_base::binary);
if(!in){
cerr<<"could not open file";
}
while (getline(in, line)){
istringstream iss(line);
if(iss>>tag>>ansi){
auto it = m.find(tag);
if(it == m.end()){
m.insert(make_pair(tag,ansi));
}
}
}
for(auto x: m){
cout<<x.second<<x.first<<endl;
}
cout<<"\033[0;35mhello";
return 0;
}
不確定爲什麼,但只有最後一個打印語句實際上以彩色顯示,其他輸出的ansi轉義代碼以文本形式輸出。
這裏是我的輸出:
\033[0;34mblue
\033[0;32mgreen
\033[0;37mgrey
\033[0;31mred
hello (in purple)
我必須在這裏應用相當數量的猜測,但在我看來,如果您將它讀入C++程序,您認爲文本文件中的「\ 033」將被解釋爲ESC。然而,這種情況並非如此。反斜槓只對編譯器運行的解析器有意義。對於文本輸入,由程序員決定將'\ 033'作爲ESC來處理。輸入函數只是字符串'{'\\','0','3','3'}'。 – 5gon12eder
您必須自己解析並轉換文件中的轉義序列,或者更改配置文件的格式。 – MikeCAT
我覺得它是這樣的......所以我該如何做到這一點? – js091514