В следующем коде выражение не может быть оценено, так как компилятор выдает мне ошибку
#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 ++, пожалуйста, помогите, но почему компилятор недостаточно умен?
Бинарный оператор принимает два (= бинарных) аргумента (как может функция), поэтому выражение 5 + 4
можно так же легко написать с помощью некоторой функции add(5, 4)
,
Обратите внимание на сообщение об ошибке, ключевые слова: «недопустимый бинарный оператор операнда%»
Поэтому, когда вы хотите использовать fmod
Вы хотите (дважды проверьте документацию) и решите, что является правым и левым операндом в вашем выражении. Вывод зависит от того, как вы пишете выражение, вот два возможных способа:
fmod(a*b, c) + d/e-f
Это правильный порядок старшинства как ты это написал.
Однако, если мы предполагаем, что вы хотите, чтобы все, что осталось от модуля, было числителем, а все, что справа от модуля, было знаменателем, мы могли бы написать это так:
fmod(a*b, c+d/e-f)
Это не будет эквивалентно вашему исходному выражению.
Обратите внимание на некоторые документация для этой функции, где он говорит параметры.
В C ++ существует небольшое ожидание, что программист обладает интеллектом, а не компилятором. Именно так программисты имеют более четкий контроль над поведением кода.
Других решений пока нет …