Buenas, he hecho el siguiente código que convierte dos caracteres hexadecimales a decimal, y sale del programa al ingresar "qq":
// Biblioteca del sistema
#include <stdio.h>
// Constantes del fichero
#define CTE 16
#define VALOR "El valor decimal de 0x%c%c es %d\n"
#define NOERROR 1
#define ERROR 0
// Funciones que usaremos
int hexDec(char car1, char car2);
int leeCaracter(char * ccar1, char * ccar2);
int main()
{
// Declaramos las variables
char car1;
char car2;
// Declaramos las variables de control
int cuno;
int cdos;
// Solicitamos los caracteres hexadecimales
do
{
// Llamamos a la función leeCaracter
leeCaracter(&car1, &car2);
cuno = NOERROR;
cdos = NOERROR;
if (!((('0' <= car1) && (car1 <= '9'))
|| (('A' <= car1) && (car1 <= 'F'))
|| (('a' <= car1) && (car1 <= 'f'))))
{
cuno = ERROR;
}
if (!((('0' <= car2) && (car2 <= '9'))
|| (('A' <= car2) && (car2 <= 'F'))
|| (('a' <= car2) && (car2 <= 'f'))))
{
cdos = ERROR;
}
if ((NOERROR == cuno) && (NOERROR == cdos))
//Llamamos a la funcion hexDec
hexDec(car1, car2);
if ((cuno == ERROR) && (car1 != 'q'))
{
printf("Error en el primer valor introducido\n");
}
if ((cdos == ERROR) && (car2 != 'q'))
{
printf("Error en el segundo valor introducido\n");
}
getchar();
}
while ((car1 != 'q') || (car2 != 'q'));
return 0;
}
// Definimos la funcion hexDec
int hexDec(char car1, char car2)
{
int valor1;
int valor2;
int valor;
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 - 32;
}
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 - 32;
}
valor = CTE * valor1 + valor2;
printf(VALOR, car1, car2, valor);
return valor;
}
// Definimos la funcion leeCaracter
int leeCaracter(char * ccar1, char * ccar2)
{
printf("Introduzca un valor hexadecimal: ");
scanf("%c%c", ccar1, ccar2);
if ((*ccar1 == 'q') && (*ccar2 == 'q'))
{
return 0;
}
else
if (((('0' <= *ccar1) && (*ccar1 <= '9'))
|| (('A' <= *ccar1) && (*ccar1 <= 'F'))
|| (('a' <= *ccar1) && (*ccar1 <= 'f')))
|| ((('0' <= *ccar2) && (*ccar2 <= '9'))
|| (('A' <= *ccar2) && (*ccar2 <= 'F'))
|| (('a' <= *ccar2) && (*ccar2 <= 'f'))))
{
return 1;
}
}
Pero al compilar me da el siguiente aviso:
hexDec7.c: En la función ‘leeCaracter’:
hexDec7.c:138:1: aviso: el control alcanza el final de una función que no es void
¿Alguien me puede decir como solucionarlo?
Saludos y gracias de antemano!
mmm lo he revisado asi a ojo y no he visto ningun fallo asique lo he metido al compilador y no ha dado ningun problema:
Process terminated with status 0 (0 minutes, 0 seconds)
0 errors, 0 warnings (0 minutes, 0 seconds)
he usado codeblocks. :huh: :huh:
SoyelRobert el warning sale al usar la opción de -Wall de g++
el error la advertencia se elimina si haces que el programa devuelva algo
en el último pedazo de código le añades return 0; o lo que necesites y listo
if ((*ccar1 == 'q') && (*ccar2 == 'q'))
{
return 0;
}
else
if (((('0' <= *ccar1) && (*ccar1 <= '9'))
|| (('A' <= *ccar1) && (*ccar1 <= 'F'))
|| (('a' <= *ccar1) && (*ccar1 <= 'f')))
|| ((('0' <= *ccar2) && (*ccar2 <= '9'))
|| (('A' <= *ccar2) && (*ccar2 <= 'F'))
|| (('a' <= *ccar2) && (*ccar2 <= 'f'))))
{
return 1;
}
return 0;
}
este tipo de avisos en la mayoría de veces no impiden que el programa se ejecute normalmente pero hace falta tenerlos en cuenta
SAludos
SoyelRobert el warning sale al usar la opción de -Wall de g++
el error la advertencia se elimina si haces que el programa devuelva algo
en el último pedazo de código le añades return 0; o lo que necesites y listo
if ((*ccar1 == 'q') && (*ccar2 == 'q'))
{
return 0;
}
else
if (((('0' <= *ccar1) && (*ccar1 <= '9'))
|| (('A' <= *ccar1) && (*ccar1 <= 'F'))
|| (('a' <= *ccar1) && (*ccar1 <= 'f')))
|| ((('0' <= *ccar2) && (*ccar2 <= '9'))
|| (('A' <= *ccar2) && (*ccar2 <= 'F'))
|| (('a' <= *ccar2) && (*ccar2 <= 'f'))))
{
return 1;
}
return 0;
}
este tipo de avisos en la mayoría de veces no impiden que el programa se ejecute normalmente pero hace falta tenerlos en cuenta
SAludos
Sí, sale con la opción -Wall, muchas gracias por la solución
Saludos!