Texto colorizado no console com C ++
Pergunta
Como posso escrever texto colorido no console com C ++? Ou seja, como posso escrever texto diferente com cores diferentes?
Solução
Adicione um pouco de cor ao seu texto do console
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;
}
Atributos de personagemAqui está como o valor "K" é interpretado.
Outras dicas
O C ++ padrão não tem noção de 'cores'. Então, o que você está pedindo depende do sistema operacional.
Para o Windows, você pode conferir o SetConsoleTextTtribute função.
No *nix, você tem que usar o Ansi Sequências de fuga.
Ansi Escape Códigos de cores:
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
Código de exemplo para C/C ++:
#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;
}
GCC:
g++ cpp_interactive_terminal.cpp -o cpp_interactive_terminal.cgi
chmod +x cpp_interactive_terminal.cgi
./cpp_interactive_terminal.cgi
Você pode escrever métodos e ligar assim
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
Supondo que você esteja falando sobre uma janela do console do Windows, procure as funções do console na documentação da biblioteca MSDN.
Caso contrário, ou mais geralmente, depende do console. As cores não são suportadas pela biblioteca C ++. Mas uma biblioteca para manuseio de console pode/apoiará cores. Por exemplo, Google "Ncurses Colors".
Para terminais seriais conectados e emuladores de terminais, você pode controlar as coisas produzindo "sequências de escape". Eles geralmente começam com o ASCII 27 (o caractere de fuga no ASCII). Existe um padrão ANSI e muitos esquemas personalizados.
Não tenho certeza do que você realmente quer fazer, mas meu palpite é que você deseja que seu programa C ++ produza texto colorido no console, certo? Não sei sobre o Windows, mas em todos os unicatos (incluindo o Mac OS X), você simplesmente usaria Ansi Escape Sequências por isso.
Nas janelas, você pode usar qualquer combinação de verde vermelho e azul em primeiro plano (texto) e fundo.
/* you can use these constants
FOREGROUND_BLUE
FOREGROUND_GREEN
FOREGROUND_RED
FOREGROUND_INTENSITY
BACKGROUND_BLUE
BACKGROUND_GREEN
BACKGROUND_RED
BACKGROUND_INTENSITY
*/
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
std::cout << "I'm cyan! Who are you?" << std::endl;
No Windows 10, você pode usar sequências de escape da seguinte maneira:
#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;
A maneira mais simples que você pode fazer é:
#include <stdlib.h>
system("Color F3");
Onde "f" é o código para a cor do plano de fundo e 3 é o código para a cor do texto.
Mexa com ele para ver outras combinações de cores:
system("Color 1A");
cout << "Hello, what is your name?" << endl;
system("Color 3B");
cout << "Hello, what is your name?" << endl;
sytem("Color 4c");
cout << "Hello, what is your name?" << endl;
Não use "System (" cor ... ")" se você não deseja que a tela inteira seja preenchida com cores. Este é o script necessário para fazer texto colorido:
#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;
}
Aqui Exemplo de Cplusplus é um exemplo de como usar as cores no console.