Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: do-while1 en 16 Abril 2013, 20:35 PM

Título: Alguien ve el error en este programa
Publicado por: do-while1 en 16 Abril 2013, 20:35 PM
El programa compara los días que hay entre dos fechas:

#include<stdio.h>
#include<stdlib.h>

struct fecha
{
  int dia, mes, year;
} fechauno, fechados;

int main (void)
{
  int a, m, d, total;
   
  printf("Dame la primera fecha más reciente (dd/mm/aa):\n");
  scanf("%d*%d*%d", &fechauno.dia , &fechauno.mes, &fechauno.year);
  printf("Dame la segunda fecha (dd/mm/aa):\n");
  scanf("%d*%d*%d", &fechados.dia , &fechados.mes, &fechados.year);
   
  a = (fechauno.year - fechados.year) * 365;
  m = (fechauno.mes - fechados.mes) * 30;
  d = fechauno.dia - fechados.dia;
 
  total = a + m + d;
   
  printf("\n\nHay %d días entre las dos fechas insertadas.\n");
  system(" pause ");
  return 0;
}


cualquier cosa que escriba me arroja como resultado "4210716"
Título: Re: Alguien ve el error en este programa
Publicado por: mr.blood en 16 Abril 2013, 20:51 PM
printf("\n\nHay %d días entre las dos fechas insertadas.\n");

Si no pones la variable en el printf, es imposible que te salga bien.

Sa1uDoS
Título: Re: Alguien ve el error en este programa
Publicado por: do-while1 en 16 Abril 2013, 21:09 PM
Ya le he modificado lo que decís pero aun así persiste el error :(
Título: Re: Alguien ve el error en este programa
Publicado por: Daniel_Ruiz en 16 Abril 2013, 21:21 PM
Código (cpp) [Seleccionar]
#include<stdio.h>
#include<stdlib.h>

struct fecha
{
 int dia, mes, year;
} fechauno, fechados;

int main (void)
{
 int a, m, d, total;
 
 printf("Dame la primera fecha más reciente (dd/mm/aa):\n");
 scanf("%d*%d*%d", &fechauno.dia , &fechauno.mes, &fechauno.year);
 printf("Dame la segunda fecha (dd/mm/aa):\n");
 scanf("%d*%d*%d", &fechados.dia , &fechados.mes, &fechados.year);
 
 a = (fechauno.year - fechados.year) * 365;
 m = (fechauno.mes - fechados.mes) * 30;
 d = fechauno.dia - fechados.dia;
 
 total = a + m + d;
 
 printf("\n\ndías entre las dos fechas insertadas.\n");
scanf("%d",total);
 system(" pause ");
 return 0;
}


creo no estoy seguro
Título: Re: Alguien ve el error en este programa
Publicado por: leosansan en 16 Abril 2013, 22:32 PM
Cita de: do-while1 en 16 Abril 2013, 21:09 PM
Ya le he modificado lo que decís pero aun así persiste el error :(

Al ser "total" una suma y no estar inicializada a cero, suma a un valor basura los otros valores ==>   int total=0.


Saluditos!. ...
(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)

Y si los datos los entras cada uno seguido de un enter o todos seguidos separados por un espacio funcionan. Pero entrándolos tipo 4/4/2012 no.
Título: Re: Alguien ve el error en este programa
Publicado por: rir3760 en 17 Abril 2013, 02:26 AM
Cita de: do-while1 en 16 Abril 2013, 20:35 PM
cualquier cosa que escriba me arroja como resultado "4210716"
El programa dará el resultado esperado si realizas el cambio que ya te indicaron e introduces los datos correctamente.

El problema (error lógico) se debe a que al pedir los datos indicas que el separador es '/':
printf("Dame la primera fecha más reciente (dd/mm/aa):\n");
/* ... */
printf("Dame la segunda fecha (dd/mm/aa):\n");


Pero al utilizar scanf indicas que el separador es '*':
scanf("%d*%d*%d", &fechauno.dia , &fechauno.mes, &fechauno.year);
/* ... */
scanf("%d*%d*%d", &fechados.dia , &fechados.mes, &fechados.year);


Para explicarlo mejor:
Dame la primera fecha mas reciente (dd/mm/aa):
31*01*2010
Dame la segunda fecha (dd/mm/aa):
01*01*2010

Hay 30 dias entre las dos fechas insertadas.


Un saludo