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;
}