Jak mogę napisać kolorowy tekst do konsoli za pomocą C ++? To znaczy, jak mogę napisać inny tekst w różnych kolorach?
Jak mogę napisać kolorowy tekst do konsoli za pomocą C ++? To znaczy, jak mogę napisać inny tekst w różnych kolorach?
Odpowiedzi:
Dodaj trochę koloru do tekstu konsoli
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;
}
Atrybuty znaków Oto jak należy interpretować wartość „k”.
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
#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;
}
g++ cpp_interactive_terminal.cpp -o cpp_interactive_terminal.cgi
chmod +x cpp_interactive_terminal.cgi
./cpp_interactive_terminal.cgi
Standardowy C ++ nie ma pojęcia „kolory”. Więc to, o co prosisz, zależy od systemu operacyjnego.
W systemie Windows możesz sprawdzić funkcję SetConsoleTextAttribute .
Na * nix musisz użyć sekwencji specjalnych ANSI .
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
SetConsoleTextAttribute(hConsole, 15);
ustawia kolor na jasną biel , a nie na biały . 7 - biały. i 15 - Bright White
W systemie Windows 10 możesz użyć sekwencji ucieczki w ten sposób:
#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;
Zakładając, że mówisz o oknie konsoli systemu Windows, poszukaj funkcji konsoli w dokumentacji biblioteki MSDN.
W przeciwnym razie lub bardziej ogólnie zależy to od konsoli. Kolory nie są obsługiwane przez bibliotekę C ++. Ale biblioteka do obsługi konsoli może / będzie obsługiwać kolory. Np. Google „ncurses colors”.
W przypadku podłączonych terminali szeregowych i emulatorów terminali można sterować, wyświetlając „sekwencje specjalne”. Zazwyczaj zaczynają się od ASCII 27 (znak zmiany znaczenia w ASCII). Istnieje standard ANSI i wiele niestandardowych schematów.
Nie jestem pewien, co naprawdę chcesz robić, ale domyślam się, że chcesz, aby Twój program C ++ wyświetlał kolorowy tekst w konsoli, prawda? Nie wiem o systemie Windows, ale we wszystkich Unices (w tym Mac OS X) po prostu użyjesz do tego sekwencji ucieczki ANSI .
W systemie Windows można użyć dowolnej kombinacji koloru czerwonego, zielonego i niebieskiego na pierwszym planie (w tekście) i w tle.
/* 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;
Najprostszy sposób, jaki możesz zrobić, to:
#include <stdlib.h>
system("Color F3");
Gdzie „F” to kod koloru tła, a 3 to kod koloru tekstu.
Zadzieraj z nim, aby zobaczyć inne kombinacje kolorów:
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;
Uwaga: testowałem tylko w systemie Windows. Pracuje. Jak wskazano, to nie jest wieloplatformowa, nie będzie działać w systemach Linux.
Nie musisz korzystać z żadnej biblioteki. Po prostu napisz system („kolor 4f”);
Nie używaj opcji „system („ Kolor… ”)”, jeśli nie chcesz, aby cały ekran był wypełniony kolorem. Oto skrypt potrzebny do stworzenia kolorowego tekstu:
#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;
}
Tutaj przykład cplusplus jest przykładem użycia kolorów w konsoli.