这是我正在研究的问题的一部分。闰年部分未正确返回。无论我是否进入闰年,它都会在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;
}
答案 0 :(得分:1)
findLeap(v);
if (findLeap)
上面没有对findLeap
的返回值进行分支,它总是正确的。就像那样,因为函数标识符隐式转换为函数指针,并且在条件符号中进行检查时,只会求值为true。
所以只需正确写出:
if (findLeap(v))
哦,我可以建议一个更好的名字吗?由于函数的目的是回答一个查询,我认为它应该有一个类似的名称。我会去isLeapYear
。