【问题标题】:What's wrong with my temperature conversions?我的温度转换有什么问题?
【发布时间】:2011-12-16 18:49:00
【问题描述】:

在这个程序中,我试图取 78 华氏度并将它们返回到具有摄氏度版本和开尔文的类中。但出于某种奇怪的原因,我只是将其作为输出。我做错了什么?

这是我的输出。

78 0 273.15
#include <iostream>
using namespace std;


class Temperature
{
public:

    double getTempKelvin();
    double getTempFahrenheit();
    double getTempCelcius();

    void setTempKelvin(double k);
    void setTempFahrenheit(double f);
    void setTempCelcius(double c);

private:
    double kelvin, fahrenheit, celcius;
    double c, f, k;
};

int main ()
{
    double c, f, k;
    Temperature Conv;

    Conv.setTempFahrenheit(f);
    Conv.setTempCelcius(c);
    Conv.setTempKelvin(k);
    cout << Conv.getTempFahrenheit() << endl;
    cout << Conv.getTempCelcius() << endl;
    cout << Conv.getTempKelvin() << endl;



    return 0;
}

void Temperature::setTempFahrenheit(double f)
{
    f = 78;
    fahrenheit = f;
}

void Temperature::setTempCelcius(double c)
{
    c = (5/9) * ( f - 32);
    celcius = c;
}

void Temperature::setTempKelvin(double k)
{
    k = c + 273.15;
    kelvin = k;
}




double Temperature::getTempFahrenheit()
{
    return fahrenheit;
}

double Temperature::getTempCelcius()
{
    return celcius;
}


double Temperature::getTempKelvin()
{
    return kelvin;
}

【问题讨论】:

    标签: c++ temperature unit-conversion


    【解决方案1】:

    5/9 是整数除法,结果为0。你需要使用双打,试试:

    void Temperature::setTempCelcius(double c)
    {
        c = (5.0/9.0) * ( f - 32);
        celcius = c;
    }
    

    【讨论】:

    • 是的,华氏 1 度是多少度,但由于某种原因它没有读取 c f 或 k 我不知道为什么
    • @mystycs:似乎读得很好。您尝试过这个建议吗?
    • +1 这解决了最初的问题,如果他不每次都按该顺序调用方法,则下一个问题是;-)
    【解决方案2】:

    除了 5/9 问题,您还有三组变量,分别称为“c”、“f”和“k”。一组是类中的成员变量。另一组是main 中的变量。第三组是各种get*函数内部的参数。

    不清楚 main 中的变量有什么用途,为什么函数需要参数,或者为什么你的类有两组温度变量(ccelsius,等等)但是如果你给变量集起不同的名字,就会更容易理解为什么你的程序不工作了。

    【讨论】:

    • 所以会逐步完成程序
    【解决方案3】:

    似乎我的问题是我正在清除 k c 和 f 双倍,所以我只是将它们从函数中删除。

    #include <iostream>
    using namespace std;
    double c, f, k;
    class Temperature
    {
    public:
    
        double getTempKelvin();
        double getTempFahrenheit();
        double getTempCelcius();
    
        void setTempKelvin();
        void setTempFahrenheit();
        void setTempCelcius();
    
    private:
        double kelvin, fahrenheit, celcius;
        double c, f, k;
    };
    
    int main ()
    {
        Temperature Conv;
    
        Conv.setTempFahrenheit();
        Conv.setTempCelcius();
        Conv.setTempKelvin();
        cout << Conv.getTempFahrenheit() << endl;
        cout << Conv.getTempCelcius() << endl;
        cout << Conv.getTempKelvin() << endl;
    
    
    
        return 0;
    }
    
    void Temperature::setTempFahrenheit(){
        f = 78;
        fahrenheit = f;
    }
    
    void Temperature::setTempCelcius()
    {
        c = (5.0/9.0) * ( f - 32);
        celcius = c;
    }
    
    void Temperature::setTempKelvin()
    {
        k = c + 273.15;
        kelvin = k;
    }
    
    
    
    
    double Temperature::getTempFahrenheit()
    {
        return fahrenheit;
    }
    
    double Temperature::getTempCelcius()
    {
        return celcius;
    }
    
    
    double Temperature::getTempKelvin()
    {
        return kelvin;
    }
    

    【讨论】:

    • 不,这不是你的问题。你的问题是你计算5/9 而不是5.0/9.0,正如乔的回答告诉你的那样。
    • @Rob 有多个问题。 5/9 是其中之一,但不是唯一的。
    【解决方案4】:
    #include<iostream>
    using namespace std;
    class temperature
    {
        public :
        virtual void calculate(float)=0;
    }; 
    class ftoc : public temperature
    {
        public :
        float c;
        void calculate(float f)
        { 
            c=(f-32)*5/9;
            cout<<"Temperature in celcius is : "<<c<<" `C "<<endl;
        }
    };
    class ftok : public temperature
    {
        public : 
        float k;
        void calculate(float f)
        {
            k=(f+459.67)*5/9;
            cout<<"Themperature in kelvin is : "<<k<<" K "<<endl;
        }
    };
    int main()
    {
        float f;
        ftoc a;
        ftok b;
        cout<<"Enter the temperature : ";
        cin>>f;
        a.calculate(f);
        b.calculate(f);
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2014-06-21
      • 1970-01-01
      • 2017-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多