frankie2020 发表于 2020-7-25 17:38:15

生命计算器,不知道哪里出错,结果总是不对

#include <stdio.h>
int main()
{
int i;
int j;
int f=0;
int k;
int p;

printf("请输入你的生日 (如1988-05-20)");
scanf("%d%d%d",&i,&i,&i);

printf("%d%d%d\n",i,i,i);
printf("\n请输入今年日期 (如2016-03-28)");
scanf("%d%d%d",&j,&j,&j);

printf("%d%d%d\n",j,j,j);


for(k=i;k<j;k++)
{
if((k%4==0&&k%100!=0)||k%400==0)

f+=366;

else

f+=365;

}

int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
      

      
      if (i % 400 == 0 || (i % 4 == 0 && i % 100 != 0))
      {
                days = 29;
               
      }
      

      for ( k = 0; k < i; k++)
      {
                f-= days ;
      }
      if (j % 400 == 0 || (j % 4 == 0 && j % 100 != 0))
      {
                days = 29;
      }
      

      for ( p= 0; p< j; p++)
      {
                f+= days ;
      }
      
      f-=i;
      f+=j;
      printf("%d\n",f);
      
      
return 0;


}

sunrise085 发表于 2020-7-25 18:13:44

月份那些天数的加减循环中,for循环结束条件写错了
for ( k = 0; k < i; k++)
改为
for ( k = 0; k < i-1; k++)

for ( p= 0; p< j; p++)
改为
for ( p= 0; p< j-1; p++)

frankie2020 发表于 2020-7-25 19:05:04

sunrise085 发表于 2020-7-25 18:13
月份那些天数的加减循环中,for循环结束条件写错了

我改过了,但是还是结果不对,我输入例子里面的数据,结果是10219.

sunrise085 发表于 2020-7-25 19:12:32

frankie2020 发表于 2020-7-25 19:05
我改过了,但是还是结果不对,我输入例子里面的数据,结果是10219.

你输入错了?
我这里输入例子中的数据,
1988 05 20
2016 03 28
结果是10174

sunrise085 发表于 2020-7-25 19:15:53

frankie2020 发表于 2020-7-25 19:05
我改过了,但是还是结果不对,我输入例子里面的数据,结果是10219.

我知道你错在哪儿了
你输入的是
1988-05-20
2016-03-28
这样的话,按照你的scanf,读取到的年是1988和2016 ,月是-5和-3,日是-20和-28这样肯定是不对的
若你想这样输入,那么scanf需要修改
scanf("%d-%d-%d",&i,&i,&i);
下面那个一样修改

frankie2020 发表于 2020-7-25 19:42:20

谢谢你,我懂了
页: [1]
查看完整版本: 生命计算器,不知道哪里出错,结果总是不对