主题:[讨论]函数容错处理: 输入年月日求天数
dd8924
[专家分:0] 发布于 2010-08-02 22:07:00
今天写了个给年月日求天数的函数,但是容错函数写得很不理想,一下又换不了别的思路 - -
我写部分代码:
/*
* 调用闰年判断函数,是闰年就返回 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个回复)
沙发
dian_ [专家分:50] 发布于 2010-08-03 01:03:00
看是否是你的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的嵌套使用不要出错就行。
板凳
dian_ [专家分:50] 发布于 2010-08-03 01:06:00
至于楼主的容错思路,还是有bug.
比如有的月份30天,有的月份31天,这些情况楼主的容错处理就不能正确判断。
我也没有太好的处理方式,就只有穷举法了。
3 楼
bruceteen [专家分:42660] 发布于 2010-08-03 12:20:00
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 楼
dd8924 [专家分:0] 发布于 2010-08-03 22:29:00
3L
我倒是还没见过这样的的条件判断哦 虽然咋看有些复杂,但是我蛮喜欢。
继续学习。
5 楼
moke9 [专家分:30] 发布于 2010-09-02 07:28:00
你好.我是全职网赚工作者.
如果你有时间有电脑.
想在网络上创业.请联系我..
项目绝对真实.详情QQ空间资料
加盟请联系 QQ908889846
6 楼
qq475035372 [专家分:0] 发布于 2010-09-16 11:35:00
#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天 这些都没考虑
我来回复