Jump to content
Fórum Script Brasil
Sign in to follow this  
lucas asx

[duvida para calcular dias entre 2 datas]

Recommended Posts

olá galera,tenho que fazer um programa em C que calcule os dias decorridos entre 2 datas,pelo que eu pensei não encontrei nenhum erro,mas a resposta aparece sempre números muito negativos.segue meu código a seguir.

eu pensei em calcular a data do ano "0' ate a data final,dps ate a inicial e subtrair.o que mais me deixou bolado,não foi o fato de dar errado por alguns dias ou algo semelhante,foi que deram números absurdos como emtre as datas 2/8/1995 e 2/8/1997 dar -1990485487 dias

obs:botem no code blocks para ficar colorido e faclitar a visualização.

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int di,mi,ai;
int df,mf,af;
int diastotais,diastotaisf,diastotaisi;
int diasf,diasi;
int anosbissextosi,anosnormaisi;
int anosbissextosf,anosnormaisf;
int dias,mes30f,mes31f,mes30i,mes31i,anos;
char letra;
while(letra!='f' && letra!='F')
{
scanf("%c",&letra);
printf("digite a data inicial dias/mes/ano\n");
scanf("%d %d %d",&di,&mi,&ai);
printf("digite a data final dia/mes/ano\n");
scanf("%d %d %d",&df,&mf,&af);
//calculo dos dias ate o final
anosbissextosf=floor(af/4);
if(mf<9)
{
mes31f=floor((mf)/2);
mes30f=mf-mes31f;
}
else
{
mes31f=floor((mf+1)/2);
mes30f=mf-mes31f;
}
if(mf==1)
diastotaisf=365*(af-1)+31*mes31f+30*mes30f+anosbissextosf-(31-df);
else if(mf==3 ||mf==5 ||mf==7||mf==8||mf==10||mf==12)
diastotaisf=365*(af-1)+31*mes31f+30*mes30f+anosbissextosf-(31-df)-2;
else if(mf==2 ||mf==4 ||mf==6||mf==9||mf==11)
diastotaisf=365*(af-1)+31*mes31f+30*mes30f+anosbissextosf-(30-df)-2;
//calculo dos dias ate o inicial
anosbissextosf=floor(af/4);
if(mf<9)
{
mes31i=floor((mi)/2);
mes30i=mf-mes31i;
}
else
{
mes31i=floor((mf+1)/2);
mes30i=mf-mes31i;
}
if(mi==1)
diastotaisi=365*(ai-1)+31*mes31i+30*mes30i+anosbissextosi-(31-di);
else if(mi==3 ||mi==5 ||mi==7||mi==8||mi==10||mi==12)
diastotaisi=365*(ai-1)+31*mes31i+30*mes30i+anosbissextosi-(31-di)-2;
else if(mi==2 ||mi==4 ||mi==6||mi==9||mi==11)
diastotaisi=365*(ai-1)+31*mes31i+30*mes30i+anosbissextosi-(30-di)-2;
diastotais=diastotaisf-diastotaisi;
printf("o numero de dias decorridos é %d\n",diastotais);
}
system("pause");
return 0;
}

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  



  • Forum Statistics

    • Total Topics
      148409
    • Total Posts
      643823
×
×
  • Create New...