即使它们都是相同的结构,我的“ if”语句中只有一个给出了准确的值

时间:2018-06-19 21:33:43

标签: c++ windows if-statement

所以我对编程非常陌生。我正在尝试为类分配创建一个程序,该程序计算流过管道的液体的雷诺数。作业要求我使用“ if”语句根据提示时用户输入的温度确定液体的实际粘度。但是,只有最后一个“ if”语句会计算出正确的值。所有的“ if”语句都具有相同的结构,但是只有最后一个起作用。请帮忙。

#include "stdafx.h"
#include <iostream>
#include <cmath>
using namespace std;


int main()
{
    double Rnumber, Velocity, viscosity, diameter, temp;


    cout << "Enter the temperature of the liquid (degrees Celsuis): " << endl;
    cin >> temp;

    if (temp == 5.0)
    {
        viscosity = (1.49 * pow(10, -6));
    }

    if (temp == 10.0)
    {
        viscosity = (1.31 * pow(10, -6));
    }

    if (temp == 15.0)
    {
        viscosity = (1.15 * pow(10, -6));
    }

    cout << "Enter the velocity of the liquid (m/s): " << endl;
    cin >> Velocity;
    cout << "Enter the diameter of the pipe (m): " << endl;
    cin >> diameter;

    Rnumber = ((Velocity * diameter) / (viscosity));

    cout << "The Reynolds number for the system is " << Rnumber << " ."<< endl;

    cin.ignore(2);
    return 0;
}

2 个答案:

答案 0 :(得分:1)

您不应比较浮点数是否相等。

在您的情况下,这可能有助于进行比较:

bool floatEqual(double a, double b)
{
    const double epsilon = 0.001;
    return ((a + epsilon) > b) && ((a - epsilon) < b);
}

但是通常这不是一个好方法(请参阅this answer

还考虑处理超出所需温度范围的情况(至少要进行一些错误处理)

您的程序应处理任何给定的值,例如5.1度 您可能希望将粘度附加到范围而不是精确的点上。

例如这样的事情也可以避免平等问题:

if (temp < 7.5)
{
    viscosity = (1.49 * pow(10, -6));
}
else if (temp < 12.5)
{
    viscosity = (1.31 * pow(10, -6));
}
else
{
    viscosity = (1.15 * pow(10, -6));
}

答案 1 :(得分:0)

如果仅检查那些特定值,则可以将temp设为int并像这样比较:if(temp == 5)。如果仍然是.0值。

您还可以考虑使用switch语句,因此您不需要所有这些if语句

switch (temp)
{
case 5:
    //....
    break;
case 10:
    //.... etc.
    break;  
default:
   //....
    break;
}