2015-04-02 244 views
0

我試圖在.5中除數,如果數字除以.5而我的餘數爲0,數字將上升到下一個。但是,如果沒有,它會下降到下一個。語義問題對二進制表達式的操作數無效('double'和'double')

當我試圖做到這一點時,我得到了一個問題,有人可以幫助我。

感謝

// 
// 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

的問題是很清楚的:你不是if(var==0)之前定義var。在C++中,您需要在第一次使用之前定義變量。注意編譯器告訴你什麼。在G ++的情況:

error: 'var' was not declared in this scope 

,我認爲這是非常明確的!

PS:不要在答案後修改代碼,因爲最終會混淆每個人。在實際的代碼中,你傳遞0.5作爲模數運算符參數。該運營商需要int。您需要其他方式測試float是否爲0.5的倍數。特別是,您還應該注意舍入誤差。

提示:a floatx是當且僅當是整數時爲0.5的倍數。因此2*x - floor(2*x)必須接近零,即abs(2*x - floor(2*x)) < 1e-12以避免浮點錯誤。

見相關的問題:Checking if float is an integer

+0

的代碼是錯誤的,當我將它張貼,我已經編輯它。 – 2015-04-02 18:58:02

4

@Oscar埃斯皮諾薩
你不能使用%(模)運算符與雙重價值
因此,它顯示了錯誤的表達無效操作數..
嘗試使用fmod(x,y) function..it會工作

+0

優秀的答案,不知道這個函數,upvoted :)但是,再次,測試相等到零小到一些小epsilon。 – vsoftco 2015-04-02 19:05:03

1

模數(%)只能與整數值一起使用。 您可以使用FMOD,但如果你的意思是整數值工作,也許這樣的技巧可以幫助:

if (10*static_cast<int>(prom)%5 == 0) 
相關問題