语义问题无效操作数到二进制表达式('double'和'double')

时间:2015-04-02 18:51:31

标签: c++ binary expression

我试图在.5中划分任何数字,如果将数字除以.5并且我的剩余数字为0,则该数字将升至下一个数字。但如果没有,它将下降到下一个。

当我尝试这样做时,我在第39行遇到了一个问题。有人可以帮助我。

由于

//
//  main.cpp
//  Promedio
//
//  Created by Oscar Espinosa on 3/27/15.
//  Copyright (c) 2015 IPN ESIME Ticoman. All rights reserved.
//

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
int ed, cv, qa, em, h, poo;
float prom, red;
string nom, ape;

cout << " Introduce tus datos" << endl
     <<"Nombre: ";
getline(cin, nom);
cout << "Apellidos: ";
getline(cin, ape);
cout << "Introduce las siguientes calificaciones" << endl
     << "Ecuaciones Diferenciales: ";
cin  >> ed ;
cout << "Calculo vectorial: ";
cin  >> cv ;
cout << "Quimica apilcada: ";
cin  >> qa ;
cout << "Electricidad y magnetismo: ";
cin  >> em;
cout << "Humanidades II: ";
cin  >> h;
cout << "Programacion orientada a objetos: ";
cin >> poo ;
prom = (ed+cv+qa+em+h+poo)/6.00;

if (prom%.5 == 0) // Semantic issue invalid operands to binary expression ('double' and 'double')
{
    ceil(prom);
    red = ceil(prom);
}
else
{
    floor(prom);
    red = floor(prom);
}

cout << nom << " " << ape << " tu promedio es " << prom << " y se redondea a " << red;

return 0;
}

3 个答案:

答案 0 :(得分:4)

@Oscar Espinosa
你不能使用带有双值的%(模数)运算符
因此它在表达式中显示错误无效的操作数..
尝试使用fmod(x,y)函数。 .it会工作

答案 1 :(得分:1)

模数(%)只能与整数值一起使用。 你可以使用fmod,但如果你打算处理整数值,也许这样的技巧可以帮助:

if (10*static_cast< int >(prom)%5 == 0)

答案 2 :(得分:0)

问题非常明确:您不能在var之前定义if(var==0)。在C ++中,您需要在变量首次使用之前定义它。注意编译器告诉你的内容。在g ++的情况下:

error: 'var' was not declared in this scope

我觉得它很明确!

PS:在回答后不要修改代码,因为你最终会让所有人感到困惑。在实际代码中,您将0.5作为模运算符参数传递。该运算符需要int。您需要其他方式来测试float0.5的倍数。特别是,您还应该注意舍入错误。

提示:当且仅当float是整数时,x 2*x是0.5的倍数。因此2*x - floor(2*x)必须接近于零,即abs(2*x - floor(2*x)) < 1e-12以避免浮点错误。

请参阅相关问题:Checking if float is an integer