| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 399 人关注过本帖
标题:分享一个充满瑕疵的算天数的小程序
只看楼主 加入收藏
pycansi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:418
专家分:1060
注 册:2012-7-26
结帖率:100%
收藏
 问题点数:0 回复次数:5 
分享一个充满瑕疵的算天数的小程序
喜欢做题目,编一些实用的小工具有意思多了,虽然这只是一个很简单的算天数的小程序,而且闰年也没能实现(貌似要+很多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 编辑 ]
搜索更多相关主题的帖子: 贪吃蛇 缓冲区 
2012-08-28 09:15
pycansi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:418
专家分:1060
注 册:2012-7-26
收藏
得分:0 
本来排好的版,怎么发上来后都乱了呢,首行缩进编辑了很多次都没成功.....就把第一个字放大了....


莫问前尘有愧,但求今生无悔
2012-08-28 09:19
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
怎样越过缓冲区,直接反馈按键值阿?

用_getch(),注意前面有下划线。

授人以渔,不授人以鱼。
2012-08-28 09:27
pycansi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:418
专家分:1060
注 册:2012-7-26
收藏
得分:0 
恩,有用,谢谢大大


莫问前尘有愧,但求今生无悔
2012-08-28 16:51
姻脂梦
Rank: 6Rank: 6
等 级:侠之大者
帖 子:264
专家分:424
注 册:2012-7-3
收藏
得分:0 
佩服
2012-08-29 07:46
zhangqi_gsts
Rank: 6Rank: 6
来 自:甘肃天水
等 级:侠之大者
威 望:1
帖 子:227
专家分:457
注 册:2011-3-27
收藏
得分:0 
顶一个
2012-08-29 09:43
快速回复:分享一个充满瑕疵的算天数的小程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018640 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved