为什么这在c ++中返回零?

时间:2014-01-10 08:51:58

标签: c++ vector printf

当我运行时,结果为零,-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;
}

我错过了什么?谢谢。

4 个答案:

答案 0 :(得分:2)

(x+3)/(x+5)被评估为整数除法,它向零舍入。 E是浮点数并不重要,因为x+3x+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

的帖子