Hola
La solución podría ser un do-while pero no lo planteas del todo bien, te pongo el código.
He utilizado la variable "flag" para imprimir el resultado sólo cuando el valor es correcto, y si no entiendes algo ya sabes.
#include <stdio.h>
int main ()
{
char car1;
char car2;
char valor1;
char valor2;
int valor, flag;
do
{
flag = 0;
printf("Introduzca un valor hexadecimal:\n"); scanf("\n%c%c", &car1
, &car2
);
if(car1 == 'q' && car2 == 'q')
{
printf("\nPresione Enter para salir....."); return 0;
}
else
{
if('0'<=car1 && car1<='9')
valor1=car1-'0';
else if ('A'<=car1 && car1<='F')
valor1=car1-'A'+10;
else if ('a'<=car1 && car1<='f')
valor1=car1-'a'+10;
else
{
flag = 1;
}
if('0'<=car2 && car2<='9')
valor2=car2-'0';
else if ('A'<=car2 && car2<='F')
valor2=car2-'A'+ 10;
else if ('a'<=car2 && car2<='f')
valor2=car2-'a'+10;
else
{
flag = 1;
}
if(flag == 0)
{
valor= 16*valor1 + valor2;
printf("EL valor decimal de 0x%c%c es %d\n\n",car1
,car2
,valor
); }
}
}
while(1);
return 0;
}
Saludos