改錯(cuò)題: [程序功能] 輸入兩個(gè)正確日期且年份在1900-9999范圍內(nèi),計(jì)算 并輸出兩個(gè)日期之間間隔的天數(shù),例如:2008-8-1 和2009-8-1之間間隔的天數(shù)為365 提示:能被4整除并且不能被100整除的年份是閏年,能 被400整除的年份也是閏年,其他年份則是平年 [測(cè)試數(shù)據(jù)與運(yùn)行結(jié)果] 顯示:first date: 輸入:1980-2-1 顯示:second date:2009-8-1 輸出:10774 days [含有錯(cuò)誤的源程序] #include <stdio.h> #define leap(int y) ((y)%4==0 && (y)%100!=0||(y)%400==0) struct d {int y,m,d;}; int days(struct d d1,struct d d2) {int mon[2][13]= {{0,31,28,31,30,31,30,31,31,30,31,30,31}, {0,31,29,31,30,31,30,31,31,30,31,30,31}}; int i; long td=0; for(i=d1.y;i<d2.y;i++) td=leap(i)?366:365; for(i=1;i<d1.m;i++) td-=mon[leap(d1.y)][i]; td-=d1.d-1; for(i=1;i<d2.m;i++) td+=mon[leap(d2.y)][i]; td+=d2.d-1; return td; }
void main() {struct d d1,d2; long td; printf("first date:"); scanf("%d-%d-%d",d1.y,d1.m,d1.d); printf("second date:"); scanf("%d-%d-%d",d2.y,d2.m,d2.d); td=days(d1,d2); printf("%ld",td); }
|