Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: jospar en 18 Enero 2015, 17:57 pm



Título: [Ayuda] Fallo de estructura
Publicado por: jospar en 18 Enero 2015, 17:57 pm
Buenas, alguien puede decirme el fallo de la funcion leeFecha definida en fecha.c??? El fichero es:
Código:
#include <stdio.h>

struct fecha leeFecha()
{
  printf("Introduzca la fecha en formato dd/mm/aaaa :");
  scanf("%d/%d/%d", &leeFecha.dia, &leeFecha.mes, &leeFecha.año);
}
int compruebaFecha(struct fecha*pFecha)
{
  int resul;
  int bis;
  bis = esBisiesto(*pFecha);
  switch(pFecha->mes)
    {
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
      if(pFecha->dia > 31 || pFecha->dia == 0)
resul = 0;
      else
resul = 1;
      break;
    case 4:
    case 6:
    case 9:
    case 11:
      if(pFecha->dia > 30 || pFecha->dia == 0)
resul = 0;
      else
resul = 1;
      break;
    case 2:
      if (bis == 0)
if(pFecha->dia > 28 || pFecha->dia == 0)
  resul = 0;
else
  resul = 1;
      else
if(pFecha->dia > 29 || pFecha->dia == 0)
  resul = 0;
else
  resul = 1;
      break;
    default:
      resul=0;
    }
  return resul;
}
int comparaFecha(struct fecha f1, struct fecha f2)
{
  int resul;
  if(f1.año<f2.año)
    resul=1;
  else if(f1.año>f2.año)
    resul=-1;
  else if(f1.año==f2.año)
    {
      if(f1.mes<f2.mes)
resul=1;
      else if(f1.mes>f2.mes)
resul=-1;
      else if(f1.mes==f2.mes)
{
  if(f1.dia<f2.dia)
    resul=1;
  else if(f1.dia>f2.dia)
    resul=-1;
  else if(f1.dia==f2.dia)
    resul=0;
}
    }
  return resul;
}
void imprimeFecha(struct fecha f)
{
  printf("%d/%d/%d", f.dia, f.mes, f.año);
}
int esBisiesto(struct fecha f)
{
  int resul;
 
  if (0 == (f.año % 4))
    {
      if (0 == (f.año % 100))
{
  if (0 == (f.año % 400))
    resul = 1;
  else
    resul=0;
}
      else
resul = 1;
    }
  else
    resul=0;
  return resul;
}
Por si necesitais saber donde esta la llamada a la funcion os paso tambien estructura.c:
Código:
#include <stdio.h>
#include "fecha.h"
#include "fecha.c"
int main()
{
  struct fecha f1;
  struct fecha f2;
  struct fecha *pf1=NULL;
  struct fecha *pf2=NULL;
  f1 = leeFecha();
  pf1=&f1;
  if (compruebaFecha(pf1) == 0)
    printf("Formato de fecha incorrecto\n");
  else
    {
      f2 = leeFecha();
      pf2=&f2;
      if (compruebaFecha(pf2) == 0)
printf("Formato de fecha incorrecto\n");
      else
{
  if(comparaFecha(f1,f2)>0)
    {
      imprimeFecha(f1);
      printf(" es anterior a ");
      imprimeFecha(f2);
      printf("\n");
    }
  else if(comparaFecha(f1,f2)<0)
    {
      imprimeFecha(f1);
      printf(" es posterior a ");
      imprimeFecha(f2);
      printf("\n");
    }
  else if(comparaFecha(f1,f2)==0)
    {
      imprimeFecha(f1);
      printf(" es igual a ");
      imprimeFecha(f2);
      printf("\n");
    }
}
      if(esBisiesto(f1)==1 && esBisiesto(f2)==1)
printf(AMBAS_BISIESTO);
      else if(esBisiesto(f1)==1 && esBisiesto(f2)==0)
printf(PRIMERA_BISIESTO);
      else if(esBisiesto(f1)==0 && esBisiesto(f2)==1)
printf(SEGUNDA_BISIESTO);
      else if(esBisiesto(f1)==0 && esBisiesto(f2)==0)
printf(NINGUNA_BISIESTO);
    }
  return 0;
}


Título: Re: [Ayuda] Fallo de estructura
Publicado por: avesudra en 18 Enero 2015, 18:53 pm
¿Puedes decir como está definida la estructura fecha? Es que no la veo por ningún sitio. Por otra parte esto es una aberración:
Código
  1. struct fecha leeFecha()
  2. {
  3.  printf("Introduzca la fecha en formato dd/mm/aaaa :");
  4.  scanf("%d/%d/%d",  &leeFecha???????.dia, &leeFecha???????.mes, &leeFecha???????.año);
  5. }
leeFecha es una función no una estructura... Además la función leeFecha devuelve una estructura tipo fecha y no veo ningún return.

Saludos.


Título: Re: [Ayuda] Fallo de estructura
Publicado por: jospar en 18 Enero 2015, 20:51 pm
Ahhh ya se donde estaba el fallo!! Gracias por el comentario aberracion jajajaja no habia mejor manera de llamarlo!! el fallo es el return y la manera de inicializar la estructura leeFecha como tu has dicho
muchas gracias!


Título: Re: [Ayuda] Fallo de estructura
Publicado por: avesudra en 18 Enero 2015, 22:18 pm
Ahhh ya se donde estaba el fallo!! Gracias por el comentario aberracion jajajaja no habia mejor manera de llamarlo!! el fallo es el return y la manera de inicializar la estructura leeFecha como tu has dicho
muchas gracias!
Pero leeFecha no es una estructura es una función... ten cuidado con eso, que funcione no quiere decir que esté bien.

Saludos.