喵宅苑 MewoGarden × 技术宅社区II | Z站 Z Station 棒棒哒纯文字二次元技术社区

正文

日期问题!!高手进来帮解答一下!

作者:矛盾
题目:输入一个日期,计算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(); }

回复

楼主看来是没意识到

作者:neuront
楼主看来是没意识到 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/
查看回复
上一页
下一页
0%
站点地图友情链接:
喵宅苑
喵空间社区程序
喵宅苑 静态版
宅喵RPG地图编辑器
络合兔
Lanzainc
技术宅
小五四博客
莉可POI
Mithril.js
枫の主题社
Project1
午后少年
机智库
七濑胡桃
xiuno
幻想の日常
魂研社
Nothentai
0xffff
欲望之花
泽泽社长
淀粉月刊
HAYOU
红客联盟
异次元
轻之国度
神奇宝贝新生代
游戏狗
口袋双子星
我的世界论坛
梦次元
动漫东东
动漫国际
精艺论坛
78动漫
吐槽弹幕网
漫客栈