题目:输入一个日期,计算N天之后的 年月日。 我做的是这个,但是到了1000天的时候就会差了一天 ,还找不出哪错了。。大神帮帮忙,看出错误指教一下, 如果自己写的对,也可以告诉我,不一定非要改我这个有源码直接发代码。。。谢谢拉 # include<stdio.h> main() { int year,month,day; int sum; int run=0;//判断闰年用的,平年为0,闰年为1 int daytime; int a[12]={31,28,31,30,31,30,31,31,30,31,30,31}; printf("您好!我是数学机器人,\n我会为您计算出您的出生日期后N天的年月日!\n\n"); printf("请输出生的年份:\n"); scanf("%d",&year); printf("请输出生的月份:\n"); scanf("%d",&month); printf("请输出生的日期:\n"); scanf("%d",&day); printf("您的出生年月日为:%d年%d月%d日\n",year,month,day); if((year%400==0)||((year%4==0)&&(year%100!=0))) run=1; printf("\n请输入天数\n"); scanf("%d",&daytime); sum=daytime+day; do { if(month==2) a[month-1] +=run; if(sum>a[month-1]) { sum -=a[month-1]; month++; } if(month==13) { year++; if(((year%4==0)&&(year%100!=0))||(year%400==0)) { run=1; } else run=0; month=1; } }while(sum>a[month-1]); day=sum; printf("\n%d天之后的日期为:\n",daytime); printf("%d年%d月%d日",year,month,day); getch(); }
楼主看来是没意识到 a[1] 一直在加啊加啊加吧. 加点代码调试一下 (测试数据 2000 年 1 月 1 日基础上加 3000 天可以明显看到问题) [mw_shl_code=c,true]if(month==2) { a[month-1] +=run; printf("NOW a[1] is %d\n", a[month-1]); }[/mw_shl_code] 要说改的话, 也就是这个地方了 [mw_shl_code=c,true]if(month==2) { sum -=a[month-1] + run; } else if(sum>a[month-1]) { sum -=a[month-1]; } month++; if(month==13) { /* 后面不变 */[/mw_shl_code] 另外, 不用这么复杂我们也能计算日期的, 这功能其实标准库里早就备好了. [mw_shl_code=c,true]#include <stdio.h> #include <time.h> int main () { time_t rawtime; struct tm* timeinfo; int year, month, day, delta; printf("Enter year: "); fflush(stdout); scanf ("%d",&year); printf("Enter month: "); fflush(stdout); scanf ("%d",&month); printf("Enter day: "); fflush(stdout); scanf ("%d",&day); printf("Enter number of days after: "); fflush(stdout); scanf ("%d",&delta); time ( &rawtime ); timeinfo = localtime ( &rawtime ); timeinfo->tm_year = year - 1900; timeinfo->tm_mon = month - 1; timeinfo->tm_mday = day + delta; /* 直接把日期数加到这个结构体对应的项上 */ mktime ( timeinfo ); /* 调用 mktime 之后, 日期结构体里的各个值都会变成 "正常" 的样子 */ printf ("That day is %d-%d-%d\n", timeinfo->tm_year + 1900, timeinfo->tm_mon + 1, timeinfo->tm_mday); return 0; } [/mw_shl_code] 参考文献→ http://www.cplusplus.com/reference/ctime/mktime/