Domanda

Come posso scrivere il testo colorato alla console con C ++? Cioè, come posso scrivere il testo diverso con colori diversi?

È stato utile?

Soluzione

Aggiungere un po 'di colore al tuo testo 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

attributi del carattere Ecco come essere interpretato il valore "k".

Altri suggerimenti

standard C ++ non ha alcuna nozione di 'colori'. Allora, cosa ti stai chiedendo dipende dal sistema operativo.

Per Windows, è possibile controllare il SetConsoleTextAttribute di funzione.

Si * nix, è necessario utilizzare il ANSI sequenze di escape.

ANSI codici colore di fuga:

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

Codice di esempio per 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

È possibile scrivere i metodi e chiamare come questo


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

Supponendo che si sta parlando di una finestra della console di Windows, cercare le funzioni della console nella documentazione di MSDN Library.

In caso contrario, o più in generale, dipende dalla console. I colori non sono supportati dalla libreria C ++. Ma una libreria per la gestione della console può / sosterrà i colori. Per esempio. Google "ncurses colori".

Per terminali seriali collegati e emulatori di terminale è possibile controllare le cose emettendo "sequenze di escape". Questi di solito iniziano con ASCII 27 (il carattere di escape in ASCII). V'è uno standard ANSI e un sacco di schemi personalizzati.

Non sono sicuro di quello che si vuole veramente fare, ma la mia ipotesi è che si desidera che il programma di C ++ per il testo colorato di uscita della console, giusto? Non so su Windows, ma su tutti i sistemi Unix (incluso Mac OS X), si sarebbe sufficiente utilizzare ANSI fuga sequenze per questo.

In Windows, è possibile utilizzare qualsiasi combinazione di verde rosso e blu in primo piano (testo) e lo sfondo.

/* 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

In Windows 10 è possibile utilizzare sequenze di escape in questo modo:

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

Il modo più semplice che si può fare è:

#include <stdlib.h>

system("Color F3");

Dove "F" è il codice per il colore di sfondo e 3 è il codice per il colore del testo.

Mess intorno con esso per vedere altre combinazioni di colore:

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;

Non utilizzare "sistema (" Colore ... ")" se non si desidera che l'intero schermo per essere riempito con il colore. Questo è lo script necessario per rendere il testo colorato:

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

cplusplus esempio è un esempio come utilizzare i colori nella consolle.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top