Código:
#include <stdio.h>
#define NOERROR 1
#define ERROR 0
int hexDec(char c1, char c2);
int main()
{
/* Declaramos las variables */
char car1;
char car2;
/* Bucle While para que salga con qq */
do
{
printf("Introduzca dos caracteres hexadecimales: ");
scanf(" %c %c", &car1, &car2);
hexDec(car1, car2);
}
while(car1 != 'q' && car2 != 'q');
return 0;
}
int hexDec(char c1, char c2)
{
char v1;
char v2;
int cuno = NOERROR;
int cdos = NOERROR;
int resultado;
if (c1 != 'q' && c2 != 'q')
{
if ('0' <= c1 && c1 <= '9')
v1 = c1 - '0';
else if ('A' <= c1 && c1 <= 'F')
v1 = c1 - 'A' + 10;
else if ('a' <= c1 && c1 <= 'f')
v1 = c1 - 'a' + 10;
else
{
cuno = ERROR;
printf("Error en el primer valor introducido\n");
}
if ('0' <= c2 && c2 <= '9')
v2 = c2 - '0';
else if ('A' <= c2 && c2 <= 'F')
v2 = c2 - 'A' + 10;
else if ('a' <= c2 && c2 <= 'f')
v2 = c2 - 'a' + 10;
else
{
cdos = ERROR;
printf("Error en el segundo valor introducido\n");
}
if (cuno == NOERROR && cdos == NOERROR)
{
resultado = 16 * v1 + v2;
printf("El valor decimal de 0x%c%c es %d\n", c1, c2,
resultado);
}
}
cuno = NOERROR;
cdos = NOERROR;
return resultado;
}
Este código lo entiendo, pero ahora me piden lo siguiente:
Modifique el código añadiendo una nueva función leeCaracter que solicite los dos caracteres hexadecimales, y que devuelva:
- 0 si se ha introducido el código qq de salida.
- 1 si se han introducido dos caracteres hexadecimales correctos
La función también devolverá por referencia los dos caracteres hexadecimales leídos. En el caso de que los caracteres hexadecimales no fuesen correctos, la función deberá volver a solicitarlos. Es decir, la función sólo puede devolver 1 y dos caracteres hexadecimales correctos por referencia, o 0 en caso de que se haya introducido el código qq.
El programa debe quedar así:
salas@318CDCr12: ̃$ ./hexDec7
Introduzca dos caracteres hexadecimales: 22
El valor decimal de 0x22 es 34
Introduzca dos caracteres hexadecimales: 3a
El valor decimal de 0x3a es 58
Introduzca dos caracteres hexadecimales: 3A
El valor decimal de 0x3A es 58
Introduzca dos caracteres hexadecimales: 3G
Error en el segundo valor introducido
Introduzca dos caracteres hexadecimales: -1
Error en el primer valor introducido
Introduzca dos caracteres hexadecimales: tA
Error en el primer valor introducido
Introduzca dos caracteres hexadecimales: qq
salas@318CDCr12: ̃$
Este ejercicio está en el tema de punteros, vamos, que hay que usar punteros en la nueva función, y no sé como meterle mano al problema. Agradecería mucho alguna explicación o modo de actuar.
Gracias de antemano y un saludo!