#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;
}這里我輸入第一個(gè)日期輸入2004 08 08時(shí),d1.year=2004, d1.month=0, d1.day=8,而第二個(gè)日期輸入2005 02 02時(shí),d2.year=0, d2.month = 8, d2.day=2005,請(qǐng)問這些日期錯(cuò)亂和變成0是怎么回事呢?
1 回答

qq___524
TA貢獻(xiàn)171條經(jīng)驗(yàn) 獲得超74個(gè)贊
把scanf的占位符改成%d就行了
%i 是老式寫法,都是整型格式,i %表示 integer 表示整型值,默認(rèn)為十進(jìn)制數(shù)表示,
d %表示 decimal 明確地表明了這是一個(gè)十進(jìn)制數(shù)表示。
- 1 回答
- 0 關(guān)注
- 1564 瀏覽
添加回答
舉報(bào)
0/150
提交
取消