当我运行时,结果为零,-5
除外。我检查过,它与最后一行无关。
#include <iostream>
using namespace std;
int main ()
{
int x;
float E;
cin >> x;
if((float)x!=-5)
{
E=(x+3)/(x+5);
cout << "Valoarea expresiesi este: " << E;
}
else
cout << "You cannot divide by zero";
cin.get();
return 0;
}
我错过了什么?谢谢。
答案 0 :(得分:2)
(x+3)/(x+5)
被评估为整数除法,它向零舍入。 E
是浮点数并不重要,因为x+3
和x+5
都不是浮点数。正如您所写,在转换已经发生之后,将转换为浮点数。在执行操作之前将操作数转换为浮点:
E = (1.0*x+3) / (x+5);
答案 1 :(得分:2)
你正在划分两个整数,结果将为零,因为分母更大。要简单地解决这个问题,请使用3.0和5.0作为文字。
E = (x + 3.0) / (x + 5.0);
答案 2 :(得分:1)
对于任何x > -5
,(x+3)/(x+5)
,分母将始终大于分子,并且整数除法将始终返回0.仅当您提供x < -5
时,答案将永远不会为0。
答案 3 :(得分:0)
不要将浮动/双打与严格的比较==
和!=
进行比较。你应该做的是
if ( fabs(x-5) < 0.00001 ) { // logically x == 5
}
else {
}
修改强>
另请查看我关于infinite loop
的帖子