0

在以下代码中,无法评估表达式,因为编译器给了我一个错误

#include <iostream>
int main()
{
    std::cout<< "Welcome\nto\n\nc++!\n";
   // std::cout<< "to c++ ! \n";
   double a=2;
   double b=2;
   double c=3;
   double d=4;
   double e=5;
   double f=6;
   double sum;
  sum=(a*b%c+d/e-f); // error: invalid operand of  types double and double to binary operators%
   std::cout <<"Sum is:" << (float) sum;
    return 0;
}

我知道 fmod(x,y) 函数可以用于双打,但表达式不会保持不变,是否有其他方法可以做到这一点,或者我需要自己制作一个表达式评估器。如果是这样,那怎么办?我是 C++ 新手,请帮忙,为什么编译器不够智能?

4

1 回答 1

0

二元运算符有两个(=二元)参数(就像函数一样),所以表达式5 + 4可以很容易地用一些函数编写add(5, 4)

请注意您收到的错误消息,关键字:“无效的操作数二元运算符 %”

因此,当您想使用时fmod(仔细检查文档)并确定表达式中的左右操作数是什么。输出取决于您如何编写表达式,这里有两种可能的方式:

fmod(a*b, c) + d/e-f这是您编写它的正确优先顺序。

但是,如果我们假设您希望模数左边的所有内容都是分子,模数右边的所有内容都是分母,我们可以这样写:

fmod(a*b, c+d/e-f)这将不等同于您的原始表达。

请注意此函数的一些文档,其中说明了参数。

在 C++ 中,有一个小小的期望是程序员拥有智能,而不是编译器。通过这种方式,程序员可以更明确地控制代码的行为方式。

于 2013-10-17T08:41:06.523 回答