分享一个充满瑕疵的算天数的小程序
不喜欢做题目,编一些实用的小工具有意思多了,虽然这只是一个很简单的算天数的小程序,而且闰年也没能实现(貌似要+很多if,先将就着人工算吧.....),不过我还是花了好几个小时才完成.....其实我本来想编个文字版贪吃蛇的,不过用不了conio.h库...没有gotoxy,没有getch.....gotoxy已经用win32 API解决了,不过,各位大牛,怎样越过缓冲区,直接反馈按键值阿?
my_type.h就不贴了,大家看名字就知道了
程序代码:
/* 天数遵循左开右闭原则 */ #include "stdlib.h" #include "stdio.h" #include "my_type.h" int main (void){ byte_1 date[11] = {0}; byte_2 s_year = 0, s_mon = 0, s_day = 0; /* s == start */ byte_2 e_year = 0, e_mon = 0, e_day = 0; /* e == end */ byte_2 day = 0; /* 结果天数 */ byte_1 mon[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; /* Start date*/ printf ("请像这样的格式 2012.08.27 ,输入开始的日期""\n"); fflush (stdin); scanf ("%s", date); /* 分离 年,月,日;-48的原因就是'1'和1的区别 */ s_year = (date[0]-48)*1000 + (date[1]-48)*100 + (date[2]-48)*10 + (date[3]-48); s_mon = (date[5]-48)*10 + (date[6]-48); s_day = (date[8]-48)*10 + (date[9]-48); /* End date */ printf ("请输入结束的日期""\n"); fflush (stdin); scanf ("%s", date); /* 再来一次.. */ e_year = (date[0]-48)*1000 + (date[1]-48)*100 + (date[2]-48)*10 + (date[3]-48); e_mon = (date[5]-48)*10 + (date[6]-48); e_day = (date[8]-48)*10 + (date[9]-48); /* Go */ /* 同一年 */ if (0 == e_year-s_year){ /* 同一月,刚开始把这厮给漏了 */ if (0 == e_mon-s_mon){ day += e_day - s_day; } /* 不同月 */ else day += mon[s_mon-1]-s_day + e_day; /* +上头尾 */ for (; s_mon < e_mon-1; s_mon += 1){ /* +中间月份 */ day += mon[s_mon]; /* mon[s_mon+1-1] */ } } /* 不同年 */ if (0 != e_year-s_year){ day += mon[s_mon-1]-s_day + e_day; /* 跨年+头尾 */ for (; s_mon < 12; s_mon += 1){ /* s_year剩余天数,边界问题举个例子就OK了 */ day += mon[s_mon]; /* mon[s_mon+1-1] */ } for (; e_mon > 1; e_mon -= 1){ /* e_year前面的天数 */ day += mon[e_mon-2]; /* mon[e_mon-1-1] */ } day += 365*(e_year-s_year-1); } /* 终于,输出了 */ printf ("\n""相差 %d 天""\n", day); return 0; }
[ 本帖最后由 pycansi 于 2012-8-28 09:20 编辑 ]