首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数,该函数将年复一年和逐日转换,并通过错误检查进行反向转换。

函数,该函数将年复一年和逐日转换,并通过错误检查进行反向转换。
EN

Code Review用户
提问于 2014-02-10 16:11:08
回答 1查看 1.2K关注 0票数 6

day_of_yearmonth_day中没有错误检查。弥补这个缺陷。

以下是解决办法:

代码语言:javascript
复制
int day_of_year(unsigned int year, unsigned int month, int day) {
    int leap, i;

    leap = ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0));

    if(((month >= 1) && (month <= 12)) && ((day >= 1) && (day <= daytab[leap][month]))) {
        for(i = 1; i < month; i++) {
            day += daytab[leap][i];
        }

        return day;
    }

    return -1;

}

void month_day(unsigned int year, unsigned int yearday, int *pmonth, int *pday) {
    int leap, i;

    leap = ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0));
    if((leap == 1 && (yearday >= 1 && yearday <= 366)) || (leap == 0 && (yearday >= 1 && yearday <= 366))) {

        for(i = 1; yearday > daytab[leap][i]; i++) {
          yearday -= daytab[leap][i];
        }
        *pday = yearday;
        *pmonth = i;
    }
    else {
        printf("error: the yearday is invalid");
    }
}

day_of_year's一案中,我必须检查yearday是否是valide。1 <= yearday <= (365 || 366)。我将参数类型改为无符号,因为一天不可能是负的,也不可能是一年。

month_day's一案中,我检查month是否有效,应该是1 <= month <= 12,然后检查day是否属于有效区间。

这一练习可在第126页的K&R2中找到。

EN

回答 1

Code Review用户

回答已采纳

发布于 2014-02-10 20:10:14

  1. 不正确的yearday限制// if((leap == 1.\x{e76f}\x{e76f}{ == 0&( >= 1&年份<= 366)){/ 365 {/365{/365){/365
  2. month_day()day_of_year()应该对month使用一致的类型。建议两种方法都使用int。// int day_of_year(未签名的int年,无符号的int月份,int日){ // month_day(无签名的int年,无符号的int年,int *p月,int *pday) { int day_of_year(未签名的int年,int月份,int日){
  3. month_day()day_of_year()应该对yearday使用一致的类型。建议两种方法都使用int。// int day_of_year(无符号int年,无符号int月份,int日){ // void month_day(无符号int年,无符号int年,int *p月,int *pday) { int day_of_year(无符号int年,int月,int day_of_year){ void month_day(无符号int年,int年,int *p月份,int *pday) {int*pday){
  4. 闰年计算leap = ((year...值较好地回到1583年。在第4至1582年是leap = (year % 4 == 0); 1582有其他并发症。4岁前有并发症。
  5. 建议month_day()返回int以表示成功或失败。
票数 4
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/41343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档