Hola buenas, tengo una duda acerca de cómo cambiar los colores de un solo printf en el lenguaje C, no en C++.
El problema que quiero resolver es el siguiente, si en un scanf por ejemplo introducimos un 0 y lo imprimimos aparece que es válido y el texto debería de ir en verde, sin embargo si es un numero distinto a 0 el texto debería de ir en rojo.
Es decir, como cambiar el color de un solo printf no el de la consola ni el de el fondo de consola.
El texto de la consola depende de la consola. Windows y Linux tienen diferentes formas de hacerlo.
Hola!
Para poner colores en
C/C++, vas a depender del
Sistema Operativo al que esté dirigido tu programa.
En caso de
WINDOWS:
#include <stdlib>
#include <Windows.h> // API del Sistema Operativo de Windows (Permite trabajar sobre la Consola).
// <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
void Color(int Background, int Text); // Prototipo de función
enum Colors { // Listado de colores (La letra "L" al inicio, indica que es un color más claro que su antecesor).
BLACK = 0,
BLUE = 1,
GREEN = 2,
CYAN = 3,
RED = 4,
MAGENTA = 5,
BROWN = 6,
LGREY = 7,
DGREY = 8,
LBLUE = 9,
LGREEN = 10,
LCYAN = 11,
LRED = 12,
LMAGENTA = 13,
YELLOW = 14,
WHITE = 15
};
// <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
int main(){
Color(BLACK, LGREEN); printf("Texto en color Verde Claro y fondo Negro");
Color(BLACK, RED); printf("Texto en color Rojo y fondo Negro");
Color(WHITE, BLACK); printf("Texto en color Negro y fondo Blanco");
Color(BLACK, WHITE); // Devolvemos el color original de la consola.
printf("Volvimos a la normalidad!");
return 0;
}
void Color(int Background, int Text){ // Función para cambiar el color del fondo y/o pantalla
HANDLE Console = GetStdHandle(STD_OUTPUT_HANDLE); // Tomamos la consola.
// Para cambiar el color, se utilizan números desde el 0 hasta el 255.
// Pero, para convertir los colores a un valor adecuado, se realiza el siguiente cálculo.
int New_Color= Text + (Background * 16);
SetConsoleTextAttribute(Console, New_Color); // Guardamos los cambios en la Consola.
}
Explicación del código:La biblioteca
"Windows.h" es la
API que proporciona el
Sistema Operativo "Windows" para programar sobre él (Consola, GUI, etc).
Entonces, declaramos la función
"Color" que recibe 2 argumentos:
*
Fondo: Esta variable va a indicar el color del fondo de la sección de la consola (Almacenado en la variable "
Background")
*
Color: Esta variable va a indicar el color del texto indicado (Almacenado en la variable "
Color")
Para facilitar el proceso de indicado de colores, se crea una lista con el nombre del color y su valor. Entonces, para mencionar al color
blanco, se utilizará "
WHITE" en vez de "
15".
Volviendo a la función, se toma el
manejador o la
Consola , para poder aplicar los cambios sobre la misma. Luego, creamos una variable llamada "
New_Color" que almacenará el número de la combinación entre el color elegido para el fondo y el color de texto, por medio de un simple cálculo:
COLOR = COLOR_DE_TEXTO + (COLOR_DE_FONDO * 16)
Terminado el cálculo, modificamos los atributos del texto de la consola, agregando el nuevo valor.
En caso de querer detener el cambio de color, se tendrá que volver a recurrir a la función (Ejemplo en el código).
Esto es solo una simple base, ya que puedes crear funciones para devolver los colores originales, aunque no son necesarias.
Espero que te haya servido de ayuda.
Buena suerte! ;D