elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Cambio Colores en un solo printf en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Cambio Colores en un solo printf en C  (Leído 29,604 veces)
zkraven

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Cambio Colores en un solo printf en C
« en: 19 Junio 2018, 19:22 pm »

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.


En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Cambio Colores en un solo printf en C
« Respuesta #1 en: 19 Junio 2018, 22:48 pm »

El texto de la consola depende de la consola. Windows y Linux tienen diferentes formas de hacerlo.


En línea

0xFer


Desconectado Desconectado

Mensajes: 400



Ver Perfil
Re: Cambio Colores en un solo printf en C
« Respuesta #2 en: 20 Junio 2018, 02:13 am »

Creo que cualquier terminal es compatible con los códigos:

Fuente

Código
  1. #include <stdio.h>
  2.  
  3. #define ANSI_COLOR_RED     "\x1b[31m"
  4. #define ANSI_COLOR_GREEN   "\x1b[32m"
  5. #define ANSI_COLOR_YELLOW  "\x1b[33m"
  6. #define ANSI_COLOR_BLUE    "\x1b[34m"
  7. #define ANSI_COLOR_MAGENTA "\x1b[35m"
  8. #define ANSI_COLOR_CYAN    "\x1b[36m"
  9. #define ANSI_COLOR_RESET   "\x1b[0m"
  10.  
  11. int main () {
  12.  
  13.  printf(ANSI_COLOR_RED     "This text is RED!"     ANSI_COLOR_RESET "\n");
  14.  printf(ANSI_COLOR_GREEN   "This text is GREEN!"   ANSI_COLOR_RESET "\n");
  15.  printf(ANSI_COLOR_YELLOW  "This text is YELLOW!"  ANSI_COLOR_RESET "\n");
  16.  printf(ANSI_COLOR_BLUE    "This text is BLUE!"    ANSI_COLOR_RESET "\n");
  17.  printf(ANSI_COLOR_MAGENTA "This text is MAGENTA!" ANSI_COLOR_RESET "\n");
  18.  printf(ANSI_COLOR_CYAN    "This text is CYAN!"    ANSI_COLOR_RESET "\n");
  19.  
  20.  return 0;
  21. }


En línea

Código
  1. int getRandomNumber(){
  2.    return 4; //chosen by fair dice roll
  3.              //guaranteed to be random
  4. }
deleted_account

Desconectado Desconectado

Mensajes: 58



Ver Perfil
Re: Cambio Colores en un solo printf en C
« Respuesta #3 en: 20 Junio 2018, 06:42 am »

Hola!

Para poner colores en C/C++, vas a depender del Sistema Operativo al que esté dirigido tu programa.

En caso de WINDOWS:

Código:
#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
« Última modificación: 20 Junio 2018, 07:12 am por Thiamatt » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines