Alguien ve el error en este programa

Iniciado por do-while1, 16 Abril 2013, 20:35 PM

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

do-while1

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"

mr.blood

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

do-while1

Ya le he modificado lo que decís pero aun así persiste el error :(

Daniel_Ruiz

#3
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
Importante


Bueno Necesito de su ayuda estoy montando una microempresa, Y estoy reuniendo Quemadoras de Dvd - Cd , Soy de Colombia Bogota si quieres apoyarme enviame un Mp Por Favor!.

leosansan

#4
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!. ...


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.

rir3760

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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language