Вопрос:

Только одно из моих утверждений «если» дает точное значение, даже если они имеют одинаковую структуру

c++ windows if-statement

59 просмотра

2 ответа

1 Репутация автора

Так что я очень новичок в программировании. Я пытаюсь создать программу для назначения класса, которая вычисляет число Рейнольдса жидкости, протекающей по трубе. Назначение требует, чтобы я использовал операторы «если», чтобы определить фактическую вязкость жидкости на основе температуры, которую вводит пользователь при появлении соответствующего запроса. Однако только последний оператор 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;
}
Автор: Mileskc Источник Размещён: 19.06.2018 09:33

Ответы (2)


1 плюс

973 Репутация автора

Вы не должны сравнивать поплавки на равенство.

в вашем случае это может помочь при сравнении:

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

но в целом это не очень хороший подход (см. http://floating-point-gui.de/errors/comparison/ )

также подумайте о том, чтобы обрабатывать случаи за пределами желаемого диапазона температуры (по крайней мере, делать некоторую обработку ошибок)

Ваша программа должна обрабатывать любое заданное значение, например, 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));
}
Автор: skeller Размещён: 19.06.2018 10:53

0 плюса

39 Репутация автора

Если вы проверяете только для этих конкретных значений, вы могли бы сделать и сравнить так: . Если его все .0 значения в любом случае.tempintif(temp == 5)

Вы также можете рассмотреть switchзаявление, чтобы вам не нужны все эти ifутверждения.

switch (temp)
{
case 5:
    //....
    break;
case 10:
    //.... etc.
    break;  
default:
   //....
    break;
}
Автор: Tim L. Размещён: 19.06.2018 11:28
Вопросы из категории :
32x32