Problema al compilar un programa

Iniciado por jamatbar, 8 Diciembre 2013, 01:15 AM

0 Miembros y 1 Visitante están viendo este tema.

jamatbar

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!

SoyelRobert

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:
getting louder!

Stakewinner00

#2
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

Código (cpp) [Seleccionar]
 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

jamatbar

Cita de: Stakewinner00 en  8 Diciembre 2013, 01:57 AM
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

Código (cpp) [Seleccionar]
 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!