Colorare il testo nella console con C ++


99

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


Non ho risorse per trovare colori diversi nella console C ++ :)
Sudantha

2
Cos'è la console C ++ ??
Edward Strange


Stai attento a queste risposte. La tua console avrà le modifiche dopo la chiusura del programma se non le ripristini tu stesso.
kayleeFrye_onDeck

Risposte:


123

Aggiungi un po 'di colore al testo della tua 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;
  }

testo alternativo

Attributi dei caratteri Ecco come interpretare il valore "k".


41
Nota che questo è solo per Windows.
DarkDust

2
E se volessi aggiungere più colori in una riga?
Fadwa

3
@Misaki non ho provato ma puoi provare a rimuovere il bit "endl"?
Sheen

3
Quale libreria devo includere per conoscere la classe HANDLE?
STF

2
@STF usa <windows.h>
Sheen

36

Codici colore di escape 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

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

3
@Mehdi Mohammadpour Ho Windows 10, ed i vostri codici di escape stanno lavorando per me, ma sembra a me che hai il primo piano e sfondo codici invertiti. Per favore, puoi invertire i titoli "FG" e "BG"?
yamex5

Sono d'accordo con @ yamex5
smoothware

Ciao yamex5 e smoothware, grazie, OK
Mehdi Mohammadpour il

23

Il C ++ standard non ha la nozione di "colori". Quindi quello che chiedi dipende dal sistema operativo.

Per Windows, puoi controllare SetConsoleTextAttribute funzione .

Su * nix, devi usare le sequenze di escape ANSI .


3
Notare che le sequenze ASNI (o almeno alcune di esse) funzionano anche su CMD.EXE di Windows.
Finanzia la causa di Monica

3
@Asu, non lo fanno prima di Win10 Anniversary Edition. Se il tuo Win10 è aggiornato, ce l'hai.
kayleeFrye_onDeck

7

Puoi scrivere metodi e chiamare in questo modo


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

2
Notare che SetConsoleTextAttribute(hConsole, 15);imposta il colore su Bright White , non su White . 7 - Bianco. e 15 - Bright White
GooDeeJaY

5

Su Windows 10 puoi usare le 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;

4

Supponendo che tu stia parlando di una finestra della console Windows, cerca le funzioni della console nella documentazione di MSDN Library.

Altrimenti, o più in generale, dipende dalla console. I colori non sono supportati dalla libreria C ++. Ma una libreria per la gestione della console può / supporterà i colori. Ad esempio google "ncurses colors".

Per i terminali seriali collegati e gli emulatori di terminale è possibile controllare le cose emettendo "sequenze di escape". In genere iniziano con ASCII 27 (il carattere di escape in ASCII). C'è uno standard ANSI e molti schemi personalizzati.


Da quando è stata scritta la risposta, Windows 10 ha ottenuto il supporto per le sequenze di escape ANSI per i flussi di console ristretti.
Saluti e salute. - Alf

2

Non sono sicuro di cosa vuoi veramente fare, ma la mia ipotesi è che tu voglia che il tuo programma C ++ esegua l'output di testo colorato nella console, giusto? Non so di Windows, ma su tutti gli Unix (incluso Mac OS X), useresti semplicemente sequenze di escape ANSI per questo.


2

In Windows, puoi utilizzare qualsiasi combinazione di rosso verde e blu in primo piano (testo) e sullo 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


2

Il modo più semplice che puoi 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.

Gioca con esso per vedere altre combinazioni di colori:

system("Color 1A");
std::cout << "Hello, what is your name?" << std::endl;
system("Color 3B");
std::cout << "Hello, what is your name?" << std::endl;
system("Color 4c");
std::cout << "Hello, what is your name?" << std::endl;

Nota: ho provato solo su Windows. Lavori. Come sottolineato, questo non è multipiattaforma, non funzionerà su sistemi Linux.


4
Questo è un cattivo approccio! Il codice non è multipiattaforma, non funzionerà nei sistemi Linux
GooDeeJaY

1

Non è necessario utilizzare alcuna libreria. Basta solo scrivere sistema ("color 4f");


4
Questo è solo Windows, e IIRC renderà l'intero schermo di un colore
nathanfranke

0

Non usare "sistema (" Colore ... ")" se non vuoi che l'intero schermo sia riempito di colore. Questo è lo script necessario per creare 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;
}

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.