我对C有点陌生,所以我对它的所有复杂性都感到困惑。在此功能中,我试图查找一个月中的天数,包括leap年。当我尝试采用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;
}

最佳答案

mod操作数仅接受两个整数。函数floor返回一个double,因此这就是错误的出处。

请将该行替换为

monthday = (30 + (month + month/8)%2);


您不需要floor函数,因为在C中将两个整数相除会得到一个整数,即结果的底数。

通过尝试使用此功能编译程序,我得到以下错误:


  test.c:21:52:错误:对二进制%无效的操作数(具有“ double”和“ int”)
           monthday =(30 +(month + floor((month / 8)))%2);

关于c - C-尝试取2的mod时出现奇怪的错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32937241/

10-13 02:49