Eso ya lo arregle, gracias.
Pero ahora tengo otro problema mayor, copio el codigo
#include <stdio.h>
#define CTE 16
int main ()
{
char car1 = '0';
char car2 = '0';
int valor1 = 0;
int valor2 = 0;
int valor = 0;
do
{
printf ("Introduzca un valor en Hexadecimal:"); scanf ("%c%c", &car1
, &car2
); if ( ( ( ( car1 <= '9') && (car1 >= '0') ) || ( (car1 >= 'A') && ( car1 <= 'F') ) || ( (car1 >= 'a') && (car1 <= 'f') ) ) && ( ( (car2 >= '0') && (car2 <= '9') ) || ( (car2 >= 'A') || (car2 <= 'F') ) || ( (car2 >= 'a') || (car2 <= 'f') ) ) )
{
if ( ('0' <= car1) && (car1 <= '9') )
valor1 = car1 - '0';
else if ( ('A' <= car1) && (car1 <= 'F') )
valor1 = car1 - 'A' + 10;
else
valor1 = car1 - 'a' + 10;
if ( ('0' <= car2) && (car2 <= '9') )
valor2 = car2 - '0';
else if ( ('A' <= car2) && (car2 <= 'F') )
valor2 = car2 - 'A' + 10;
else
valor2 = car2 - 'a' + 10;
valor = CTE * valor1 + valor2;
printf("El valor decimal de 0x%c%c es %d\n", car1
, car2
, valor
);
}
if ( ( (car1 > '9' || car1 < '0') || car1 > 'F') || (car1 > 'f'))
{
printf ("Error en el primer valor introducido\n"); }
if ( ( (car2 > '9' || car2 < '0') && (car2 > 'f') ) )
{
printf ("Error en el segundo valor introducido\n"); }
}
while ( (car1 != 'q') && (car2 != 'q');
return 0;
}
Ahora debería hacer un bucle para que me pidiera que introduzca un valor hasta que escriba "qq" pero cuando entra en el bucle se me distorsionan los valores, por ejemplo:
Un ejemplo de modo de funcionamiento correcto sería:
Introduzca el numero hexadecimal: 12
El valor decimal de 0x12 es 18
Introduzca el numero hexadecimal: 1B
El valor decimal de 0x1B es 27
Introduzca el numero hexadecimal: 1b
El valor decimal de 0x1b es 27
Introduzca el numero hexadecimal: 1G
Error en el segundo valor introducido
Introduzca el numero hexadecimal: g1
Error en el primer valor introducido
Introduzca el numero hexadecimal: Gg
Error en el primer valor introducido
Error en el segundo valor introducido
Introduzca el numero hexadecimal: A1
El valor decimal de 0xA1 es 161
Introduzca el numero hexadecimal: A2
El valor decimal de 0xA2 es 162
Introduzca el numero hexadecimal: AB
El valor decimal de 0xAB es 171
Introduzca el numero hexadecimal: qq
Cuando yo lo hago el primer valor si me da correcto, pero a partir de ay da un montón de errores y otro problema que tengo que no se corregir es que me considera que 'b' no es menor que 'F'
PD: gracias por la ayuda