2017-08-16 52 views
-2

嗨我剛剛開始在大學學習C語言。現在我面臨着一個我不知道如何解決的問題。到目前爲止,我們只使用了 庫,沒有別的,scanf也是我們下週要學的 。現在我們只是使用printf來處理所有事情。 我已經學會如何說如果一年是閏年,但是,我的任務是下一個:需要創建一個程序來讀取日期並打印出第二天的日期,輸出如下:閱讀日期並打印出第二天日期的C程序

Enter a date in the form day month year: 17 5 2010 
The date of the next day is: 18/5/2010 

我的困境是,我不知道要使用什麼操作或如何設置代碼以確保考慮閏年,例如如果今天的日期是28 2 2010年下一個日期需要是1 3 2010年,因爲它不是閏年。 使用的唯一庫並沒有scanf函數,但(與scanf函數還) 到目前爲止,我得到這個:

#include <stdio.h> 

int day, month, year, ndays, leapdays; 
bool leapyear; 
int main() { 
    day = 28; 
    month = 2; 
    year = 2010; 
    ndays = day + 1; 
    leapdays = 31; 
    leapyear = false; 
    if (leapyear % 4 == 0) { 
     leapyear = true; 
    } 
    if (leapyear % 100 == 0) { 
     leapyear = false; 
    } 
    if (leapyear % 400 == 0) { 
     leapyear = true; 
    } 
    if ((leapyear) && (month == 12 || month == 1 || month == 3 || month == 5 
     || month == 7 || month == 8 || month == 10)) { 
     leapdays = 31; 
    } 
    if ((leapyear) && (month == 4 || month == 6 || month == 9 || month == 11 
     )) { 
     leapdays = 30; 
    } 
    if ((leapyear) && (month == 2)) { 
     leapdays = 29; 
    } else if ((leapyear == false) && (month == 2)) { 
     leapdays = 28; 
    } 
    printf ("Enter a date in the form day month year: %d %d %d \n", day, 
      month, year); 
    printf ("The date of the next day is: %d/%d/%d", ndays, month, year); 
} 
+0

如果你不能使用'scanf'你打算如何獲得輸入? –

+0

你不輸入,你只需創建變量並在其周圍改變它 –

+1

你不需要喊,但是你確實需要處理你的問題描述,因爲它說'需要創建一個讀取日期的程序'和你的printf請求輸入。 –

回答

0

你加1天之後,檢查,看看是否能值比數較大當月的天數。如果是這樣,請將日期設置爲1並將月份加1。然後檢查月份是否大於12,如果是,則將月份設置爲1並將年份加1。

至於確定一個月中的天數,除了二月份以外的所有月份都具有相同的天數,無論該年份是否爲閏年。現在你正在檢查年份是否是其他月份的閏年。您可以退出該檢查並只檢查月份編號。

if (month == 12 || month == 1 || month == 3 || month == 5 
    || month == 7 || month == 8 || month == 10) { 
    leapdays = 31; 
} 
if (month == 4 || month == 6 || month == 9 || month == 11) { 
    leapdays = 30; 
} 
0

明白了吧:)感謝所有幫助

#include <stdio.h> 

    int day, month, year, ndays, leapdays; 
    bool leapyear; 
    int main() { 
     day = 31; 
     month = 12; 
     year = 2010; 
     ndays = day + 1; 
     leapyear = false; 
     printf ("Enter a date in the form day month year: %d %d %d \n", day, month, year); 
     if (year % 4 == 0) { 
      leapyear = true; 
     } 
     if (year % 100 == 0) { 
      leapyear = false; 
     } 
     if (year % 400 == 0) { 
      leapyear = true; 
     } 
     if ((leapyear) && (month == 12 || month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10)) { 
      leapdays = 31; 
     } 
     if ((leapyear) && (month == 4 || month == 6 || month == 9 || month == 11)) { 
      leapdays = 30; 
     } 
     if ((leapyear) && (month == 2)) { 
      leapdays = 29; 
     } else if (leapyear == false) { 
      leapdays = 28; 
     } 
     if ((leapdays == 31) && (day == 31)) { 
      ndays = 1; 
      month = month + 1; 
     }else if ((leapdays == 30) && (day == 30)) { 
        ndays = 1; 
        month = month + 1; 

     }else if ((leapdays == 29) && (day == 29)) { 
         ndays = 1; 
        month = month + 1; 
     }else if ((leapdays == 28) && (day == 28)) { 
        ndays = 1; 
        month = month + 1; 
     }else if ((month == 12) && (day == 31)) { 
        ndays = 1; 
        month = 1; 
        year = year + 1; 
     } 


     printf ("The date of the next day is: %d/%d/%d", ndays, month, year); 
    } 
+2

您應該使用函數;如果你正在處理二月份,你應該只測試閏年;你應該使用'scanf()'或類似的函數來讀取要處理的值 - 此刻,你必須重新編譯程序來更改日期。十二月,一月,三月,五月,七月,八月,十月有多少天是非年?在if((leapyear)&&(month == 12 || month == 1 || month == 3 || month == 5 || month == 7 || month)中測試閏年似乎很奇怪== 8 || month == 10)){leapdays = 31; }'。同樣的四月,六月,九月和十一月? –

+1

OTOH,如果你下週瞭解'scanf()',也許你不知道'main()'以外的函數......當你學習編寫函數時,編寫可讀代碼會更容易。無論您是否使用函數,本月的日期問題都在那裏。 –

0

考慮不同的流量。首先先找到每月的日子,然後再測試月底和年底。

int year, month, day; 
    // set year, month, day in some fashion 

    day++; // tomorrow 

    int days_per_month = 31; 
    if (month == 4 || month == 6 || month == 9 || month == 11) { 
    days_per_month = 30; 
    } else if (month == 2) { 
    days_per_month = 28; 
    if (year % 4 == 0) { 
     days_per_month = 29; 
     if (year % 100 == 0) { 
     days_per_month = 28; 
     if (year % 400 == 0) { 
      days_per_month = 29; 
     } 
     } 
    } 
    } 
    if (day > days_per_month) { 
    day = 1; 
    month++; 
    if (month > 12) { 
     month = 1; 
     year++; 
    } 
    } 

其他改善將使用輔助功能,枚舉類型和不同的定義。然而這段代碼似乎反映了OP的水平。