我试图在.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;
}
答案 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
。您需要其他方式来测试float
是0.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