Estimados señores: El día de hoy empecé a codificar un programa que me permitiría obtener los componentes RGB de una cadena hexadecimal de color, si yo ingresara 6c6c6c me devolvería (108, 108, 108), el programa estaría hecho para realizar varias conversiones consecutivas asi que consideré correcto incorporar un while y preguntar al usuario si quiere continuar luego de cada conversión, el usuario respondería solo con 2 opciones: s ó n, el detalle es que no he conseguido que el programa me reconozca el char ingresado por el usuario, logré arreglarlo momentáneamente para que me reconozca el valor numérico de los caracteres pero eso se aleja de la idea original, no logro encontrar la falla en mi código y en verdad agradecería cualquier ayuda o crítica constructiva que puedan brindarme.
El entorno de programación que estoy utilizando es:
Codeblocks 10050 (http://forums.codeblocks.org/index.php/board,20.0.html)
MinGW-w64 4.9.2 POSIX - DWARF (http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/)
Este es el código que he escrito hasta ahora.
El entorno de programación que estoy utilizando es:
Codeblocks 10050 (http://forums.codeblocks.org/index.php/board,20.0.html)
MinGW-w64 4.9.2 POSIX - DWARF (http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/)
Este es el código que he escrito hasta ahora.
Código (c) [Seleccionar]
/* Convertidor de colores hexadecimales a colores RGB */
#include <stdio.h>
/* Función que devuelve el valor decimal de una cifra hexadecimal */
int hex_to_dec(char letra);
int main(void)
{
char color[7];
char respuesta = 115;
int rgb[3];
int contador, factor, position;
/* 110 = Valor ASCII de la letra n
115 = Valor ASCII de la letra s */
while(respuesta != 110) // Aca puse anteriormente while(respuesta != 'n') pero no funciono
{
/* Inicializando valores */
for(contador = 0; contador <= 2; contador++)
rgb[contador]= 0;
position = 0;
/* Ingresando el color en hexadecimal */
printf("Color hexadecimal: ");
scanf("%s", color);
/* Iniciando procesamiento de datos para hallar el color RGB */
for(contador = 0; color[contador] != '\0'; contador++)
{
factor = (contador % 2 == 0) ? 16 : 1;
if(color[contador] >= 49 && color[contador] <= 57)
rgb[position] += (color[contador] - 48) * factor;
else if(color[contador] >= 97 && color[contador] <= 102)
rgb[position] += hex_to_dec(color[contador]) * factor;
else if(color[contador] >= 65 && color[contador] <= 70)
rgb[position] += hex_to_dec(color[contador]) * factor;
if(factor == 1)
position++;
}
/* Mostrando los valores decimales del número hexadecimal */
printf("RGB: ");
for(contador = 0; contador <= 2; contador++)
{
if(contador == 2)
printf("%d", rgb[contador]);
else
printf("%d - ", rgb[contador]);
}
printf("\n");
/* Preguntando respuesta para continuar */
printf("Continuar? s/n: ");
scanf("%d", &respuesta); // Aca puse anteriormente scanf("%c", &respuesta) pero el programa no ejecutaba el scanf
printf("\n");
}
return 0;
}
/* Definiendo la función que devuelve el valor decimal de una cifra hexadecimal */
int hex_to_dec(char letra)
{
int contador;
static int base = 10;
static char minusculas[6] = {'a', 'b', 'c', 'd', 'e', 'f'};
static char mayusculas[6] = {'A', 'B', 'C', 'D', 'E', 'F'};
/* Recorriendo el arreglo para encontrar coincidencias */
for(contador = 0; contador <= 5; contador++)
{
if(letra == minusculas[contador] || letra == mayusculas[contador])
break;
}
return base + contador;
}