为什么我的功能在C中无法正常工作

时间:2017-02-26 14:41:55

标签: c function struct

这是我正在研究的问题的一部分。闰年部分未正确返回。无论我是否进入闰年,它都会在2月份返回29。我做错了什么?

#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;
}

1 个答案:

答案 0 :(得分:1)

findLeap(v);
if (findLeap)

上面没有对findLeap的返回值进行分支,它总是正确的。就像那样,因为函数标识符隐式转换为函数指针,并且在条件符号中进行检查时,只会求值为true。

所以只需正确写出:

if (findLeap(v))

哦,我可以建议一个更好的名字吗?由于函数的目的是回答一个查询,我认为它应该有一个类似的名称。我会去isLeapYear