Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: jamatbar en 8 Diciembre 2013, 01:15 am



Título: Problema al compilar un programa
Publicado por: jamatbar en 8 Diciembre 2013, 01:15 am
Buenas, he hecho el siguiente código que convierte dos caracteres hexadecimales a decimal, y sale del programa al ingresar "qq":



Código:
// 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!


Título: Re: Problema al compilar un programa
Publicado por: SoyelRobert en 8 Diciembre 2013, 01:35 am
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:

Código:
Process terminated with status 0 (0 minutes, 0 seconds)
0 errors, 0 warnings (0 minutes, 0 seconds)

he usado codeblocks.  :huh: :huh:


Título: Re: Problema al compilar un programa
Publicado por: 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
  1.  if ((*ccar1 == 'q') && (*ccar2 == 'q'))
  2.    {
  3.      return 0;
  4.    }
  5.  else
  6.    if (((('0' <= *ccar1) && (*ccar1 <= '9'))
  7.         || (('A' <= *ccar1) && (*ccar1 <= 'F'))
  8.         || (('a' <= *ccar1) && (*ccar1 <= 'f')))
  9. || ((('0' <= *ccar2) && (*ccar2 <= '9'))
  10.    || (('A' <= *ccar2) && (*ccar2 <= 'F'))
  11.    || (('a' <= *ccar2) && (*ccar2 <= 'f'))))
  12.      {
  13.  
  14. return 1;
  15.      }
  16.  
  17.     return 0;
  18. }

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


Título: Re: Problema al compilar un programa
Publicado por: jamatbar en 8 Diciembre 2013, 17:12 pm
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
  1.  if ((*ccar1 == 'q') && (*ccar2 == 'q'))
  2.    {
  3.      return 0;
  4.    }
  5.  else
  6.    if (((('0' <= *ccar1) && (*ccar1 <= '9'))
  7.         || (('A' <= *ccar1) && (*ccar1 <= 'F'))
  8.         || (('a' <= *ccar1) && (*ccar1 <= 'f')))
  9. || ((('0' <= *ccar2) && (*ccar2 <= '9'))
  10.    || (('A' <= *ccar2) && (*ccar2 <= 'F'))
  11.    || (('a' <= *ccar2) && (*ccar2 <= 'f'))))
  12.      {
  13.  
  14. return 1;
  15.      }
  16.  
  17.     return 0;
  18. }

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!