elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Alguien ve el error en este programa
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Alguien ve el error en este programa  (Leído 2,635 veces)
do-while1

Desconectado Desconectado

Mensajes: 20



Ver Perfil
Alguien ve el error en este programa
« 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"


En línea

mr.blood

Desconectado Desconectado

Mensajes: 150


Ver Perfil
Re: Alguien ve el error en este programa
« Respuesta #1 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


En línea

do-while1

Desconectado Desconectado

Mensajes: 20



Ver Perfil
Re: Alguien ve el error en este programa
« Respuesta #2 en: 16 Abril 2013, 21:09 pm »

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

Daniel_Ruiz

Desconectado Desconectado

Mensajes: 28



Ver Perfil
Re: Alguien ve el error en este programa
« Respuesta #3 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
« Última modificación: 16 Abril 2013, 21:23 pm por Daniel_Ruiz » En línea

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


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Alguien ve el error en este programa
« Respuesta #4 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!. ...


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.
« Última modificación: 17 Abril 2013, 00:21 am por leosansan » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Alguien ve el error en este programa
« Respuesta #5 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
En línea

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
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines