回 帖 发 新 帖 刷新版面

主题:[讨论]函数容错处理: 输入年月日求天数

今天写了个给年月日求天数的函数,但是容错函数写得很不理想,一下又换不了别的思路 - -

我写部分代码:
/*
 * 调用闰年判断函数,是闰年就返回 1 。
 */
if(is_leap_year(year))
    if ((year < 0 || month > 12 || day > 31) || (month == 2 && day > 29))
        printf("Input Error! \n");
/*
 * 平年情况下的判断  就是这有bug:输入2000-02-29显示错误
 */ 
if((year < 0 || month > 12 || day > 31) || (month == 2 && day > 28))
        printf("Input Error! \n");
        
    我的思路可能有问题, 这个容错函数不太明白怎么弄了, 希望知道的帮指导一下, 谢谢了 :)

回复列表 (共6个回复)

沙发

看是否是你的if嵌套用错了。。
/*
 * 调用闰年判断函数,是闰年就返回 1 。
 */
if(is_leap_year(year))
   [b]{
    [/b]  if ((year < 0 || month > 12 || day > 31) || (month == 2 && day > 29))
        printf("Input Error! \n");
    [b]}[/b]
/*
 * 平年情况下的判断  就是这有bug:输入2000-02-29显示错误
 */ 
[b]else 
       {[/b]
         if((year < 0 || month > 12 || day > 31) || (month == 2 && day > 28))
        printf("Input Error! \n");
      [b]  }[/b]

注意我加了两个括号和一个else。楼主可根据你的全部代码进行更改,可以改的简单些,只要注意if的嵌套使用不要出错就行。

板凳


至于楼主的容错思路,还是有bug.
  比如有的月份30天,有的月份31天,这些情况楼主的容错处理就不能正确判断。
  我也没有太好的处理方式,就只有穷举法了。

3 楼

if( year<0
    || month<1 || month>12
    || day<1 || day>31-(month-1)%7%2
    || ( month==2 && day>28+is_leap_year(year) ) )
{
    printf("Input Error! \n");
}

4 楼



3L
我倒是还没见过这样的的条件判断哦  虽然咋看有些复杂,但是我蛮喜欢。  

继续学习。

5 楼

你好.我是全职网赚工作者.
如果你有时间有电脑.
想在网络上创业.请联系我..
项目绝对真实.详情QQ空间资料
加盟请联系 QQ908889846

6 楼

#include "stdio.h"
void main()
{
    int year,month,day,sum,leap;
    printf("请输入年,月,日\n");
    scanf("%d,%d,%d",&year,&month,&day);
    if((year%4==0&&year%100!=0)||(year%400==0))
        leap=1;
    else
        leap=0;
    if(year!=0&&month!=0&&month<=12&&day!=0&&day<=31)
    {switch(month)
    {
      case 1: sum=day;break;
      case 2: sum=31+day;break;
      case 3: sum=59+day+leap;break;
      case 4: sum=90+day+leap;break;
      case 5: sum=120+day+leap;break;
      case 6: sum=151+day+leap;break;
      case 7: sum=181+day+leap;break;
      case 8: sum=212+day+leap;break;
      case 9: sum=243+day+leap;break;
      case 10: sum= 273+day+leap;break;
      case 11: sum= 304+day+leap;break;
      case 12: sum= 334+day+leap;break;
          }
    printf("%d年%d月%d日是这一年的第%d天\n",year,month,day,sum);
    }
    else printf("请输入正确的日期格式\n");

}
我是新手 只会这个,而且有的月份是三十天,还有平年2月是28天 瑞年是29天 这些都没考虑

我来回复

您尚未登录,请登录后再回复。点此登录或注册