Colorear texto en la consola con C ++
Pregunta
¿Cómo puedo escribir el texto a la consola de color con C ++? Es decir, ¿cómo puedo escribir un texto diferente con diferentes colores?
Solución
Añadir un poco de color a la consola de texto
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;
}
Atributos de caracteres Aquí es cómo interpretar el valor "k".
Otros consejos
estándar de C ++ no tiene noción de 'colores'. Así que lo que están pidiendo depende del sistema operativo.
En Windows, se puede revisar la SetConsoleTextAttribute función.
En * nix, usted tiene que utilizar la ANSI secuencias de escape.
ANSI códigos de color de escape:
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 ejemplo 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
Se puede escribir métodos y llame como esto
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
Asumiendo que estamos hablando de una ventana de la consola de Windows, busque las funciones de la consola en la documentación de MSDN.
En caso contrario, o más en general, depende de la consola. Los colores no son compatibles con la biblioteca de C ++. Pero una biblioteca para el manejo de la consola puede / apoyará colores. P.ej. Google "ncurses colores".
Para los terminales conectados en serie y emuladores de terminal que puede controlar las cosas mediante la salida de "secuencias de escape". Estos por lo general comienzan con ASCII 27 (el carácter de escape en ASCII). No es un estándar ANSI y una gran cantidad de esquemas personalizados.
No estoy seguro de lo que realmente quiere hacer, pero mi conjetura es que usted quiere que su programa en C ++ para texto en color de salida en la consola, ¿verdad? No sabe acerca de Windows, pero en todos los sistemas Unix (incluyendo Mac OS X), usted sólo tiene que utilizar escape ANSI secuencias para eso.
En Windows, se puede usar cualquier combinación de rojo, verde y azul en el primer plano (texto) y el fondo.
/* 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;
En Windows 10 puede usar las secuencias de escape de esta manera:
#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;
La forma más sencilla que puede hacer es:
#include <stdlib.h>
system("Color F3");
Donde "F" es el código para el color de fondo y 3 es el código para el color del texto.
perder el tiempo con él para ver otras combinaciones:
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;
No utilice "del sistema (" Color ... ")" si no desea que toda la pantalla para ser llenado con el color. Este es el script necesario para hacer que el texto de color:
#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 ejemplo es un ejemplo de cómo utilizar los colores en la consola.