错误:类型的无效操作数' float'并且'漂浮'到二元'运算符%'

时间:2015-12-28 20:32:54

标签: c compiler-errors

我刚刚开始用C语言编程,我在运行程序时发现了一个问题。 错误如下,resto == a % b;

  

[错误]类型无效的操作数' float'并且'漂浮'到二元'运算符%'在C

#include<stdio.h>
#include <math.h>

char n;

int main (){

    printf ("Programma che svolge ogni tipo di operazione aritmetica tra 2 numeri a e b\n'n' per chiudere\nPremere 'invio' per continuare\n");
    float a, b, somma, differenza, prodotto, quoziente;
    int resto;
    while (n=getchar()!='n'){
        printf ("Inserisci a\n");
        scanf ("%f",&a);

        printf ("Inserisci b\n");
        scanf ("%f",&b);

        somma = a + b;
        differenza = a - b;
        prodotto = a * b;
        quoziente = a / b;
        resto = a % b;

        printf ("somma = %f + %f = %f\n",a,b,somma);
        printf ("differenza = %f - %f = %f\n",a,b,differenza);
        printf ("prodotto = %f * %f = %f\n",a,b,prodotto);
        printf ("quoziente = %f / %f = %f\n",a,b,quoziente);
        printf ("resto = %f %% %f = %d\n",a,b,resto);
    }
    return 0;
}

那里的解决方案:

postimg.org/image/guoxt6evn

3 个答案:

答案 0 :(得分:2)

  

错误如下,'resto == a%b';

那是因为模数运算符%无法应用于floatdouble。当整数类型x除以y时,它意味着得到余数。与floatdouble一起使用时,它没有任何意义。

Draco18s也发现,即使resto == a % ba是整数类型,此b也不是您想要的。 ==是逻辑运算符,因此表达式将产生临时值1(对于true)和0。但该临时值 NOT 根本没有分配给resto。您需要使用赋值运算符=

答案 1 :(得分:1)

在评论讨论之后,问题归结为这一行:

    float a, b, somma, differenza, prodotto, quoziente;
    int resto;

您需要将ab更改为整数:

    float somma, differenza, prodotto, quoziente;
    int a, b, resto;

由于@artm指出的问题

答案 2 :(得分:1)

devi usare la http://www.cplusplus.com/reference/cmath/fmod/ fmod per fare il resto di tipi float o double