Pergunta

Como posso escrever texto colorido no console com C ++? Ou seja, como posso escrever texto diferente com cores diferentes?

Foi útil?

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;
  }

alt text

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;

Fonte: https://msdn.microsoft.com/en-us/library/windows/desktop/ms682088(v=vs.85).aspx#_win32_character_attributes

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top