C++表达式必须在% [duplicate]上具有整数或无作用域枚举类型

mepcadol  于 2023-07-01  发布在  其他
关注(0)|答案(1)|浏览(136)

此问题已在此处有答案

Can't use modulus on doubles?(5个答案)
4天前关闭。
在这段代码中,我已经定义了这段代码中的其余部分为浮点数据类型,但编译器拒绝了,并假设将其定义为整数类型,这是什么原因呢?enter image description here

int main()
{

    float days, hours, minutes, seconds;
    float Totalseconds;
    float Remainder;
    float secondsperday;
    float secondsperhour;
    float secondsperminute;

    secondsperday = 24 * 60 * 60;
    secondsperhour = 60 * 60;
    secondsperminute = 60;

    cout << "Enter total seconds\n";
    cin >> Totalseconds;

    days = floor(Totalseconds / secondsperday);
    Remainder = (Totalseconds % secondsperday);

    hours = floor(Remainder / secondsperhour);
    Remainder = Remainder % secondsperhour;

    minutes = floor(Remainder / secondsperminute);
    Remainder = Remainder % secondsperminute;

    seconds = Remainder;

    cout << days << ":" << hours << ":" << minutes << ":" << seconds;

    return 0;
}
0pizxfdo

0pizxfdo1#

表达式必须在% s上具有整数或未限定范围的枚举类型
float这样的浮点数在C++中没有%运算符。它们都不是整数(即整数,如int)或无作用域枚举(即enum),所以你得到这个错误。
如果你想要一个类似于%运算符的浮点余数,你可以使用std::fmod

Remainder = std::fmod(Totalseconds, secondsperday);

然而,在代码中,似乎没有一个数字必须是float(除非Totalseconds可以是123.456)。如果您只是将所有float类型更改为int,则此代码也可以编译。

相关问题