2017-02-26 87 views
-1

這是我正在處理的問題的一部分。閏年部分未正確返回。無論我是否投入閏年,它都會在二月份返回29。我究竟做錯了什麼?爲什麼我的功能在C中無法正常工作?

#include <stdio.h> 
#include <stdbool.h> 

struct date 
{ 
    int month; 
    int day; 
    int year; 
}; 

int main (void) 
{ 
    struct date now; 
    void numberOfDays (struct date v); 
    bool findLeap (struct date v); 
    printf("Enter the date in this format mm/dd/yyyy: "); 
    scanf("%i", &now.month, &now.day, &now.year); 

    numberOfDays(now); 

    return 0; 
} 

void numberOfDays (struct date v) 
{ 
    int daysOfMonth; 
    bool findLeap (struct date v); 

    if (v.month == 4 || v.month == 6 || v.month == 9 || v.month == 11) 
     daysOfMonth = 30; 

    else if (v.month == 2) 
    { 
     findLeap(v); 
     if (findLeap) 
      daysOfMonth = 29; 
     else 
      daysOfMonth = 28; 
    } 

    else 
     daysOfMonth = 31; 

    printf("Number of days in month: %i", daysOfMonth); 
} 


bool findLeap (struct date v) 
{ 
    bool isLeap; 

    if (v.year % 4 == 0 && v.year % 100 != 0 || v.year % 400 == 0) 
    { 
     isLeap = true; 
    } 
    else 
    { 
     isLeap = false; 
    } 

    return isLeap; 
} 
+0

你'scanf'是錯誤的 - 三個值,但格式字符串中只有一個。 'scanf(「%i」,...' - >'scanf(「%i%i%i」,...' –

+0

是的,我之前已經把它改正了,但是在嘗試所有我沒有改變的東西它回來了。謝謝。 – crawfbigg

回答

1
findLeap(v); 
if (findLeap) 

以上不上的findLeap返回值分支,它總是如此。就是這樣,因爲函數標識符會隱式轉換爲函數指針,並且在條件中檢查時只會計算爲true。

所以只寫它正確:

if (findLeap(v)) 

哦,我可能會建議一個更好的名字?由於函數的目的是回答查詢,我認爲它的名字應該像一個一樣。我會去isLeapYear

+0

哇。謝謝。我會試試看。真的很感謝幫助! – crawfbigg

相關問題