Foro de elhacker.net

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:

Código:
#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
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. struct fecha
  5. {
  6.  int dia, mes, year;
  7. } fechauno, fechados;
  8.  
  9. int main (void)
  10. {
  11.  int a, m, d, total;
  12.  
  13.  printf("Dame la primera fecha más reciente (dd/mm/aa):\n");
  14.  scanf("%d*%d*%d", &fechauno.dia , &fechauno.mes, &fechauno.year);
  15.  printf("Dame la segunda fecha (dd/mm/aa):\n");
  16.  scanf("%d*%d*%d", &fechados.dia , &fechados.mes, &fechados.year);
  17.  
  18.  a = (fechauno.year - fechados.year) * 365;
  19.  m = (fechauno.mes - fechados.mes) * 30;
  20.  d = fechauno.dia - fechados.dia;
  21.  
  22.  total = a + m + d;
  23.  
  24.  printf("\n\ndías entre las dos fechas insertadas.\n");
  25. scanf("%d",total);
  26.  system(" pause ");
  27.  return 0;
  28. }

creo no estoy seguro


Título: Re: Alguien ve el error en este programa
Publicado por: leosansan en 16 Abril 2013, 22:32 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
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 '/':
Código
  1. printf("Dame la primera fecha más reciente (dd/mm/aa):\n");
  2. /* ... */
  3. printf("Dame la segunda fecha (dd/mm/aa):\n");

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

Para explicarlo mejor:
Código:
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