135 votes

Colorisation du texte dans la console avec C++

Comment écrire du texte coloré dans la console avec C++ ? C'est-à-dire, comment puis-je écrire des textes différents avec des couleurs différentes ?

0 votes

A fait mais pas de ressources à trouver différentes couleurs dans la console C++ :)

4 votes

Quelle est la console C++ ?

0 votes

Duplicata possible de : stackoverflow.com/questions/3585846/

160voto

Sheen Points 541

Ajoutez un peu de couleur à votre texte de 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

Attributs des personnages Voici comment interpréter la valeur "k".

66 votes

Notez que cette fonction est réservée à Windows.

2 votes

Que faire si je veux ajouter plusieurs couleurs sur une même ligne ?

4 votes

@Misaki Je n'ai pas testé mais pouvez-vous essayer de supprimer le bit 'endl' ?

75voto

Codes de couleur d'échappement ANSI :

Name            FG  BG
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

Exemple de code pour 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;
}

CCG :

g++ cpp_interactive_terminal.cpp -o cpp_interactive_terminal.cgi
chmod +x cpp_interactive_terminal.cgi
./cpp_interactive_terminal.cgi

9 votes

@Mehdi Mohammadpour J'ai Windows 10, et vos codes d'échappement sont Cela fonctionne pour moi, mais il me semble que vous avez inversé les codes d'avant-plan et d'arrière-plan. Pouvez-vous inverser les intitulés "FG" et "BG", s'il vous plaît ?

0 votes

Je suis d'accord avec @yamex5.

0 votes

Salut yamex5 & smoothware, Merci, OK

27voto

user225312 Points 22699

Le C++ standard n'a pas de notion de "couleurs". Ce que vous demandez dépend donc du système d'exploitation.

Pour Windows, vous pouvez consulter le SetConsoleTextAttribute fonction.

Sur *nix, vous devez utiliser la commande ANSI les séquences d'échappement.

5 votes

Notez que les séquences ASNI (ou du moins certaines d'entre elles) fonctionnent également avec CMD.EXE de Windows.

3 votes

@Asu, ils ne le font pas avant Win10 Anniversary Edition. Si votre Win10 est à jour, vous l'avez.

13voto

Sudantha Points 2907

Vous pouvez écrire des méthodes et les appeler comme ceci


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

3 votes

Notez que SetConsoleTextAttribute(hConsole, 15); fixe la couleur à Blanc brillant et non à Blanc . 7 - Blanc. y 15 - Blanc brillant

8voto

Krzysztof Buchacz Points 136

Sous Windows 10, vous pouvez utiliser les séquences d'échappement de cette manière :

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

0 votes

ENABLE_VIRTUAL_TERMINAL_PROCESSING d'une manière ou d'une autre ne fonctionne pas pour moi sous Windows 10. J'obtiens [32mError![0m comme sortie. Est-ce que quelque chose m'échappe ?

0 votes

Votre code réinitialise tous les autres drapeaux de la console de sortie

3 votes

@ProjectPhysX J'ai trouvé une solution, nous devrions d'abord sauvegarder le mode console original. ``` DWORD dwMode ; HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE) ; GetConsoleMode(hOutput, &dwMode) ; dwMode |= ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING ; SetConsoleMode(hOutput, dwMode)) ; ``` Cela fonctionne pour moi sur Win10.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X