所以我对编程非常陌生。我正在尝试为类分配创建一个程序,该程序计算流过管道的液体的雷诺数。作业要求我使用“ 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;
}
答案 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;
}