2014-10-18 60 views
-1

我的目標是將日期的天數添加到日期並返回正確的日期。具有日期功能的邏輯

我有用戶輸入日期(dd,mm,yyyy)以及他們希望進入未來的天數(天)。

你能幫助我改進邏輯

我的輸出結果是,如果我輸入一個日期如:18/10/2014和新增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 日月年佔用計算,每月和每年的天數。

謝謝

+1

如果你知道這是「顯然不正確」,那麼你也應該知道*爲什麼*它是不正確的。 – usr2564301 2014-10-18 10:55:51

+0

轉換爲從基準日起的天數。通過添加天數來重新轉換爲日期。 – BLUEPIXY 2014-10-18 11:47:08

回答

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 S:

while (days > restof(year)) ... // do year advancement stuff 
while (days > restof(month)) ... // do month advancement stuff 
// advance days that are left 

在您的例子,118當天表示該天剛剛被添加到日期的天,即你輸入第一遍中的else子句。你傳遞給函數的哪個值爲pdtmpdty? (此外,爲什麼他們必須通過?爲什麼不讓他們本地?)