Ir para conteúdo
Fórum Script Brasil

[duvida para calcular dias entre 2 datas]


Posts Recomendados

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;
}
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...