如何使用C ++将彩色文本写入控制台?也就是说,我怎样才能用不同的颜色写出不同的文字?
答案 0 :(得分:84)
Add a little Color to your Console Text
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
// you can loop k higher to see more color choices
for(int k = 1; k < 255; k++)
{
// pick the colorattribute k you want
SetConsoleTextAttribute(hConsole, k);
cout << k << " I want to be nice today!" << endl;
}
Character Attributes 以下是如何解释“k”值。
答案 1 :(得分:15)
答案 2 :(得分:6)
Name BG FG
Black 30 40
Red 31 41
Green 32 42
Yellow 33 43
Blue 34 44
Magenta 35 45
Cyan 36 46
White 37 47
Bright Black 90 100
Bright Red 91 101
Bright Green 92 102
Bright Yellow 93 103
Bright Blue 94 104
Bright Magenta 95 105
Bright Cyan 96 106
Bright White 97 107
#include <iostream>
#include <string>
int main(int argc, char ** argv){
printf("\n");
printf("\x1B[31mTexting\033[0m\t\t");
printf("\x1B[32mTexting\033[0m\t\t");
printf("\x1B[33mTexting\033[0m\t\t");
printf("\x1B[34mTexting\033[0m\t\t");
printf("\x1B[35mTexting\033[0m\n");
printf("\x1B[36mTexting\033[0m\t\t");
printf("\x1B[36mTexting\033[0m\t\t");
printf("\x1B[36mTexting\033[0m\t\t");
printf("\x1B[37mTexting\033[0m\t\t");
printf("\x1B[93mTexting\033[0m\n");
printf("\033[3;42;30mTexting\033[0m\t\t");
printf("\033[3;43;30mTexting\033[0m\t\t");
printf("\033[3;44;30mTexting\033[0m\t\t");
printf("\033[3;104;30mTexting\033[0m\t\t");
printf("\033[3;100;30mTexting\033[0m\n");
printf("\033[3;47;35mTexting\033[0m\t\t");
printf("\033[2;47;35mTexting\033[0m\t\t");
printf("\033[1;47;35mTexting\033[0m\t\t");
printf("\t\t");
printf("\n");
return 0;
}
g++ cpp_interactive_terminal.cpp -o cpp_interactive_terminal.cgi
chmod +x cpp_interactive_terminal.cgi
./cpp_interactive_terminal.cgi
答案 3 :(得分:5)
假设您正在讨论Windows控制台窗口,请在MSDN Library文档中查找控制台功能。
否则,或者更一般地说,它取决于控制台。 C ++库不支持颜色。但是用于控制台处理的库可能/将支持颜色。例如。谷歌“ncurses colors”。
对于连接的串行终端和终端仿真器,您可以通过输出“转义序列”来控制事物。这些通常以ASCII 27(ASCII中的转义字符)开头。有一个ANSI标准和许多自定义方案。
答案 4 :(得分:4)
HANDLE hConsole;
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
int col=12;
// color your text in Windows console mode
// colors are 0=black 1=blue 2=green and so on to 15=white
// colorattribute = foreground + background * 16
// to get red text on yellow use 4 + 14*16 = 228
// light red on yellow would be 12 + 14*16 = 236
FlushConsoleInputBuffer(hConsole);
SetConsoleTextAttribute(hConsole, col);
cout << "Color Text";
SetConsoleTextAttribute(hConsole, 15); //set back to black background and white text
答案 5 :(得分:4)
我发现仅标头的开源 C++ 库可在多个平台上运行: https://github.com/imfl/color-console
一个轻量级的头文件 C++ 库,为您的 Windows 带来色彩 带有非常易于使用的 API 的控制台,让您摆脱繁琐的负担 每次拨打电话时设置和重置屏幕颜色。
<块引用>#include "../include/color.hpp"
#include <iostream>
int main() {
std::cout << dye::aqua("Hello, World!") << std::endl;
return 0; }
<块引用>
无需重置:市场上的大多数解决方案都像操纵器一样工作, 设置后不断要求您重置屏幕颜色 它。虽然这个库中也提供了这种传统方法 色调命名空间...
如果您不仅要更改颜色,而且要以更易读的形式(例如表格形式)打印文本,还可以使用 https://github.com/p-ranav/tabulate 更改颜色并在控制台中绘制表格。
<块引用>tabulate 是一个只有头文件的库。只需将 include/ 添加到您的 include_directories ,你应该很高兴。单个头文件 版本也可以在 single_include/ 中找到。 注意表格支持 >=C++11。
答案 6 :(得分:2)
我不确定你真正想做什么,但我猜你希望你的C ++程序在控制台中输出彩色文本,对吗?不了解Windows,但在所有Unices(包括Mac OS X)上,您只需使用ANSI escape sequences即可。
答案 7 :(得分:2)
您可以做的最简单的方法是:
var drawnItems = L.featureGroup().addTo(mymap);
mymap.addControl(new L.Control.Draw({
edit: {
featureGroup: drawnItems,
poly: {
allowIntersection: false
}
},
draw: {
polygon: {
allowIntersection: false,
showArea: true
}
}
}));
var str = document.getElementById("ingeojson").value;
var shapeJson = JSON.parse(str);
var shape = L.geoJSON(shapeJson);
var shapeLayer = L.GeoJSON.geometryToLayer(shapeJson);
drawnItems.addLayer(shapeLayer);
shapeLayer.addTo(mymap);
mymap.fitBounds(shapeLayer.getBounds());
其中“F”是背景颜色的代码,3是文本颜色的代码。
用它来查看其他颜色组合:
#include <stdlib.h>
system("Color F3");
答案 8 :(得分:1)
在Windows中,您可以在前景(文本)和背景上使用红色绿色和蓝色的任意组合。
rest
答案 9 :(得分:1)
在Windows 10上,您可以通过以下方式使用转义序列:
#ifdef _WIN32
SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), ENABLE_VIRTUAL_TERMINAL_PROCESSING);
#endif
// print in red and restore colors default
std::cout << "\033[32m" << "Error!" << "\033[0m" << std::endl;
答案 10 :(得分:0)
如果您不希望整个屏幕都被彩色填充,请不要使用“ system(” Color…“)”。这是制作彩色文本所需的脚本:
#include <iostream>
#include <windows.h>
int main()
{
const WORD colors[] =
{
0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F,
0xA1, 0xB2, 0xC3, 0xD4, 0xE5, 0xF6
};
HANDLE hstdin = GetStdHandle(STD_INPUT_HANDLE);
HANDLE hstdout = GetStdHandle(STD_OUTPUT_HANDLE);
WORD index = 0;
SetConsoleTextAttribute(hstdout, colors[index]);
std::cout << "Hello world" << std::endl;
FlushConsoleInputBuffer(hstdin);
return 0;
}
答案 11 :(得分:0)
我可能参加聚会很晚,但最近我发现了一个名为Colorfulpp的出色头文件库,该库可以将c ++控制台输出以所需的任何rgb颜色着色。它提供了彩色输出的通用接口。
答案 12 :(得分:0)
您不需要使用任何库。只需写system(“ color 4f”);
答案 13 :(得分:0)
这是我的轻量级解决方案,适用于 Windows 和 Linux:
#include <iostream>
#include <string>
#ifdef _WIN32
#define WIN32_LEAN_AND_MEAN
#define VC_EXTRALEAN
#include <Windows.h> // for displaying colors
#endif // Windows
#define color_black 0
#define color_dark_blue 1
#define color_dark_green 2
#define color_light_blue 3
#define color_dark_red 4
#define color_magenta 5
#define color_orange 6
#define color_light_gray 7
#define color_gray 8
#define color_blue 9
#define color_green 10
#define color_cyan 11
#define color_red 12
#define color_pink 13
#define color_yellow 14
#define color_white 15
string get_textcolor_code(const int textcolor) { // Linux only
switch(textcolor) {
case 0: return "30"; // color_black 0
case 1: return "34"; // color_dark_blue 1
case 2: return "32"; // color_dark_green 2
case 3: return "36"; // color_light_blue 3
case 4: return "31"; // color_dark_red 4
case 5: return "35"; // color_magenta 5
case 6: return "33"; // color_orange 6
case 7: return "37"; // color_light_gray 7
case 8: return "90"; // color_gray 8
case 9: return "94"; // color_blue 9
case 10: return "92"; // color_green 10
case 11: return "96"; // color_cyan 11
case 12: return "91"; // color_red 12
case 13: return "95"; // color_pink 13
case 14: return "93"; // color_yellow 14
case 15: return "97"; // color_white 15
default: return "37";
}
}
string get_backgroundcolor_code(const int backgroundcolor) { // Linux only
switch(backgroundcolor) {
case 0: return "40"; // color_black 0
case 1: return "44"; // color_dark_blue 1
case 2: return "42"; // color_dark_green 2
case 3: return "46"; // color_light_blue 3
case 4: return "41"; // color_dark_red 4
case 5: return "45"; // color_magenta 5
case 6: return "43"; // color_orange 6
case 7: return "47"; // color_light_gray 7
case 8: return "100"; // color_gray 8
case 9: return "104"; // color_blue 9
case 10: return "102"; // color_green 10
case 11: return "106"; // color_cyan 11
case 12: return "101"; // color_red 12
case 13: return "105"; // color_pink 13
case 14: return "103"; // color_yellow 14
case 15: return "107"; // color_white 15
default: return "40";
}
}
string get_print_color(const int textcolor) { // Linux only
return "\033["+get_textcolor_code(textcolor)+"m";
}
string get_print_color(const int textcolor, const int backgroundcolor) { // Linux only
return "\033["+get_textcolor_code(textcolor)+";"+get_backgroundcolor_code(backgroundcolor)+"m";
}
void print_color(const int textcolor) {
#if defined(_WIN32)
static const HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(handle, textcolor);
#elif defined(__linux__)
cout << get_print_color(textcolor);
#endif // Windows/Linux
}
void print_color(const int textcolor, const int backgroundcolor) {
#if defined(_WIN32)
static const HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(handle, backgroundcolor<<4|textcolor);
#elif defined(__linux__)
cout << get_print_color(textcolor, backgroundcolor);
#endif // Windows/Linux
}
void print_color_reset() {
#if defined(_WIN32)
static const HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(handle, 7); // reset color
#elif defined(__linux__)
cout << "\033[0m"; // reset color
#endif // Windows/Linux
}
void println(const string& s="") {
cout << s << endl;
}
void print(const string& s="") {
cout << s;
}
void print(const string& s, const int textcolor) {
print_color(textcolor);
cout << s;
print_color_reset();
}
void print(const string& s, const int textcolor, const int backgroundcolor) {
print_color(textcolor, backgroundcolor);
cout << s;
print_color_reset();
}
void print_no_reset(const string& s, const int textcolor) { // print with color, but don't reset color aftwerwards (faster)
print_color(textcolor);
cout << s;
}
void print_no_reset(const string& s, const int textcolor, const int backgroundcolor) { // print with color, but don't reset color aftwerwards (faster)
print_color(textcolor, backgroundcolor);
cout << s;
}
这是一个如何使用它的示例:
int main() {
print("Hello ", color_red, color_blue);
print("World!\n", color_black, color_yellow);
println();
return 0;
}
答案 14 :(得分:-1)
此处cplusplus example是如何在控制台中使用颜色的示例。