我的目标是将日期添加到日期并返回正确的日期。
我让用户输入一个日期(dd,mm,yyyy)以及他们希望将来(天)的天数。
你能帮助改善我的逻辑
吗?我的结果输出是如果我输入日期,例如:2014年10月18日并添加100天我得到的日期是118/10/2014,这显然是不对的。
void dateafter(int *pd, int *pm, int *py, int *pdtm, int *pdty, int *days ){
while(*days >= 0){
if(*days > *pdty){
*py += 1;
daymonthyear(*pm, *py, *pdtm, *pdty);
*days -= *pdty;
}
if(*days > *pdtm - *pd){
*pm = *pm + 1;
if(*pm > 12){
*pm = 1;
*py = *py + 1;
}
daymonthyear(*pm,*py,*pdtm,*pdty);
*days -= *pdtm;
}
else{
*pd += *days;
break;
}
}
}
pdtm指的是本月的天数,pdty指的是pdty daymonthyear计算每月和每年的天数。
由于
答案 0 :(得分:0)
答案 1 :(得分:0)
您的代码中存在一些逻辑错误,但它们不一定会影响您的示例。
if(*days > *pdty){
*py += 1;
daymonthyear(*pm, *py, *pdtm, *pdty);
*days -= *pdty;
}
这段代码适用于3月份以来的所有日期。在闰年的1月和2月,你跳过今年的闰日,但你的代码会跳过明年的闰日。 (你可以跳过今年余下的时间,就像几个月一样,但你需要知道一年中当天的指数。)
if(*days > *pdtm - *pd){
*pm = *pm + 1;
if(*pm > 12){
*pm = 1;
*py = *py + 1;
}
daymonthyear(*pm,*py,*pdtm,*pdty);
*days -= *pdtm;
}
在这里,您将跳过本月余下的时间。进入此区块后,*pd
应为1,但您只需更改月份。你也应该从日期中减去*pdtm - *pd
,你应该在计算下个月的日子之前这样做。
也许您的while
应该是if
s而不是一个包装while
:
while (days > restof(year)) ... // do year advancement stuff
while (days > restof(month)) ... // do month advancement stuff
// advance days that are left
在您的示例中,第118天表示日期刚刚添加到日期的日期,即您在第一次传递中输入else
子句。您传递给函数的pdtm
和pdty
的值是多少? (而且,为什么他们必须通过?为什么不让他们在当地?)