C - 尝试取2个数字的mod时出现奇怪的错误

时间:2015-10-04 19:04:19

标签: c function

我是C的新手,所以我遇到了所有错综复杂的问题。在这个函数中,我试图找到一个月内的天数,包括闰年。当我尝试取2个数字的mod时,我的问题出现在第二个else语句中。有帮助吗?这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int length(int month, int year)
{
    int monthday;

    if (month == 2) {
        if ((year % 400 == 0) || ((year % 100 != 0) && (year % 4 == 0))) {
            monthday = 29;
        } else {
            monthday = 28;
        }
    } else {
        monthday = (30 + (month + floor((month / 8))) % 2);
    }
    return monthday;
}

1 个答案:

答案 0 :(得分:0)

mod操作数只接受两个整数。函数floor返回一个double,这就是错误源自的地方。

请用

替换该行
monthday = (30 + (month + month/8)%2);

你不需要floor函数,因为在C中除以两个整数会得到一个整数作为结果,这是结果的底限。

通过尝试使用此函数编译程序,我收到此错误:

  

test.c:21:52:错误:二进制%的操作数无效(有'double'和'int')            monthday =(30 +(月+楼((月/ 8)))%2);