#include <stdio.h>
#include <stdbool.h>
struct date
{
int year;
int month;
int day;
};
int f(struct date d)
{
if(d.month<=2)
return d.year-1;
else
return d.year;
}
int g(struct date d)
{
if(d.month<=2)
return d.month+13;
else
return d.month+1;
}
int calculateN(struct date d)
{
int N;
N=1461*f(d)/4+153*g(d)/5+d.day;
return N;
}
int calculateDay(struct date d1,struct date d2)
{
int day,d1N,d2N;
d1N=calculateN(d1);
d2N=calculateN(d2);
day=d1N-d2N;
if(day<0)
day=-day;
return day;
}
int main(void)
{
struct date d1,d2;
printf("Please enter two date(YYYY MM DD): \n");
printf("The first: ");
scanf("%i %i %i",&d1.year,&d1.month,&d1.day);
printf("\nThe second: ");
scanf("%i %i %i",&d2.year,&d2.month,&d2.day);
printf("\nThe day between the two date is: %i",calculateDay(d1,d2));
printf("\n %i %i",calculateN(d1),calculateN(d2));
return 0;
}这里我输入第一个日期输入2004 08 08时,d1.year=2004, d1.month=0, d1.day=8,而第二个日期输入2005 02 02时,d2.year=0, d2.month = 8, d2.day=2005,请问这些日期错乱和变成0是怎么回事呢?
1 回答
qq___524
TA贡献171条经验 获得超74个赞
把scanf的占位符改成%d就行了
%i 是老式写法,都是整型格式,i %表示 integer 表示整型值,默认为十进制数表示,
d %表示 decimal 明确地表明了这是一个十进制数表示。
- 1 回答
- 0 关注
- 1488 浏览
添加回答
举报
0/150
提交
取消