【问题标题】:Error while running program with certain operator and operands in C在 C 中使用某些运算符和操作数运行程序时出错
【发布时间】:2015-08-23 05:41:47
【问题描述】:

我试图运行一个程序,但它显示错误:

无效的二元运算符浮点数

当我尝试制作 float 时,它说:

无效的二元运算符浮点数

问题在于% 运算符及其操作数。

请告诉我该怎么做?

#include <stdio.h>
int main()
{
    float x,y;
    scanf("%f%f",&x,&y);
    float z=x%5.0f;
    if(x<=y && z==0)
        printf("%.2f",y-x-0.50);
    else if (x>y || z!=0)
            printf("%.2f",y);
    return 0;
 }

【问题讨论】:

  • 模运算符 % 仅适用于整数之间..
  • 我更改了缩进以反映它是如何工作的。

标签: c output operand


【解决方案1】:

Modulus % 只对整数有意义,因为它被定义为整数除法的余数。你不能用浮点数做整数除法。

【讨论】:

    【解决方案2】:

    模数运算符不适用于浮点数。您可能想使用 fmod 功能:

    http://www.cplusplus.com/reference/cmath/fmod/

    【讨论】:

      【解决方案3】:

      请注意% 运算符不适用于float。相反,您需要使用 fmod() 来满足您的要求。

      double fmod(double numerator, double denominator);
      

      【讨论】:

        【解决方案4】:

        FMOD 功能就是你所需要的:

        #include <stdio.h>
        
        int main(void){
            float x,y;
            double z;
        
        
            scanf("%f%f",&x,&y);
        
            z = fmod(x, 5.0f);
        
            if(x<=y && z==0)
                printf("%.2f",y-x-0.50);
            else if (x>y || z!=0)
                    printf("%.2f",y);
            return 0;
         }
        

        【讨论】:

          【解决方案5】:

          正如@amdixon 评论的那样:“模运算符% 仅适用于整数之间。”

          % 运算符的操作数应为整数类型。
          C11dr §6.5.5 2

          根据float 算法,建议使用fmodf() 而不是% 或fmod()。
          fmodf() 计算x/y 的浮点余数。

          // float z=x%5.0f;
          float z = fmodf(x , 5.0f);
          

          注意事项:

          fmod() 和家庭的结果可以预期是准确的。 Ref

          % 是 余数。将其称为模运算符会重载其含义,这在使用a%b 时通常不符合预期,a 或b 是负数。见What's the difference between “mod” and “remainder”?

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-05-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-04-06
            相关资源
            最近更新 更多