Temperature Conversion

Can someone guide me in the right direction? I don't know what's going on. I'm getting a segmentation error

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include<iostream>
 
using namespace std;
 
class temperature{
 
   double input;
   double degreef;
   double degreek;
   double degreec;
  
   public: 
      double setTempKelvin();
      double setTempFahrenheit();
      double setTempCelsius();
};
 
double temperature::setTempKelvin(){
   degreek = degreec + 273.15;
   return degreek;
   
}
 
double temperature::setTempFahrenheit(){
   degreef  = degreec * (9.0/5) + 32;
   return degreef;
}
 
double temperature::setTempCelsius(){
   degreec = (5.0/9) * (degreef - 32); 
   return degreec;
}
 
int main(){
 
   temperature *temp; 
 
   double input, degreef, degreek, degreec;
   char type;
 
   cout << "Which kind of temperature would you like to enter?"<< endl;
   cout << "(Kelvin(1), Fahrenheit(2), Celsius(3))";
   cin >> type;
  
   if(type == '1'){ 
      cout << "Enter your temperature: ";
      cin >> input; 
      input = degreek;
   }
 
   else if (type == '2'){
      cout << "Enter your temperature: ";
      cin >> input;
      input = degreef;
   }
 
   else if(type == '3'){
      cout <<"Enter your temperature: ";
      cin >> input;
      input = degreec;
   }
 
   else {
      cout << "You have entered something invalid"<<endl;
      cout << "This program will now end "<<endl;
      return 0;
   }
 
   cout << "Your temperature in Kelvin is " << temp->setTempKelvin() << endl;
   cout << "Your temperature in Celsius is "<< temp->setTempCelsius() << endl;
   cout << "Your temperature in Fahrenheit is "<< temp->setTempFahrenheit() << endl;
}
Last edited on
help!
anyone?
The class temperature has a major omission. It has outputs but no input. There should be a constructor(s) or some function(s) to get the values into the class.

At line 36, temperature *temp; an uninitialised pointer is declared. This should not be de-referenced until it has been set to point to a valid address. Or don't bother with a pointer at all, just declare an actual temperature object.
Last edited on
Okay I've fixed a few things, now I don't know how to make it display the right conversion calculations.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include<iostream>
 
using namespace std;
 
class temperature{
 
   double input;
   double degreef;
   double degreek;
   double degreec;
  
   public: 
      double setTempKelvin();
      double setTempFahrenheit();
      double setTempCelsius();
};
 
double temperature::setTempKelvin(){
   degreek = degreec + 273.15;
   return degreek;
   
}
 
double temperature::setTempFahrenheit(){
   degreef  = degreec * (9.0/5) + 32;
   return degreef;
}
 
double temperature::setTempCelsius(){
   degreec = degreef - 273.15;
   return degreec;
}
 
int main(){
 
   temperature *temp = new temperature; 
 
   double input, degreef, degreek, degreec;
   char type;
 
   cout << "Which kind of temperature would you like to enter?"<< endl;
   cout << "(Kelvin(1), Fahrenheit(2), Celsius(3))";
   cin >> type;
  
   if(type == '1'){ 
      cout << "Enter your temperature: ";
      cin >> input; 
 
      cout << "Your temperature in Kelvin is " << input <<endl;
      cout << "Your temperature in Celsius is "<< temp->setTempCelsius() <<endl;
      cout << "Your temperature in Fahrenheit is "<< temp->setTempFahrenheit() <<endl;
   }
 
   else if (type == '2'){
      cout << "Enter your temperature: ";
      cin >> input;
 
      cout << "Your temperature in Kelvin is "<< temp->setTempKelvin() << endl;
      cout << "Your temperature in Celsius is "<< temp->setTempCelsius() << endl;
      cout << "Your temperature in Fahrenheit is "<< input <<endl;
   }
 
   else if(type == '3'){
      cout <<"Enter your temperature: ";
      cin >> input;
 
      cout << "Your temperature in Kelvin is "<< temp->setTempKelvin() << endl;
      cout << "Your temperature in Celsius is "<< input << endl;
      cout << "Your temperature in Fahrenheit is "<< temp->setTempFahrenheit() << endl;
   }
 
   else {
      cout << "You have entered something invalid"<<endl;
      cout << "This program will now end "<<endl;
      return 0;
   }

}
There is still no way to get the values into the temperature object.
For example, this function, double setTempKelvin(); doesn't accept any parameter.

You could have something like this, to set the value inside the object.
 
void setTempKelvin(double input);

Here, simply store whichever of the three values was supplied by the user, and calculate and store the other two values. That is, most of the work is done in the setXXX() function.

The getXXX() function simply retrieves a value, e.g.
 
double getFahrenheit() { return degreef; };

Last edited on
Here is a working temperature thingy:

Loads of debugging and making sure it worked fine for you...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#include <iostream>
#include <cstdio>
#include <cstdlib>

#define number .55555555555555555555555555555555555555555

using namespace std;

void setTempKelvin(double degreek,double degreec,double degreef,char type)
{
    if(type == 'c')
    {
        degreek = degreec + 273.15;
    }
    else if(type == 'f')
    {
        degreec = degreef * number - 32;
        degreek = degreec + 273.15;
    }

    cout << degreek;
}

void setTempFahrenheit(double degreef,double degreec,double degreek,char type)
{
    if(type == 'c')
    {
        degreef  = degreec * 1.8 + 32;
    }
    else if(type == 'k')
    {
        degreec = degreek - 273.15;
        degreef  = degreec * 1.8 + 32;
    }
    cout << degreef;
}

void setTempCelsius(double degreec,double degreef,double degreek,char type)
{
    if(type == 'f')
    {
        degreec = degreef * number - 32;
    }
    else if(type == 'k')
    {
        degreec = degreek - 273.15;
    }
    cout << degreec;
}

int main()
{
   double input, degreef = 0, degreek = 0, degreec = 0;
   int type;
   char t;

   cout << "Which kind of temperature would you like to enter?"<< endl;
   cout << "(Kelvin(1), Fahrenheit(2), Celsius(3)): ";
   cin >> type;

   switch(type)
   {
   case 1:
        cout << "Enter your temperature: ";
        cin >> input;
        degreek = input;
        break;
   case 2:
        cout << "Enter your temperature: ";
        cin >> input;
        degreef = input;
        break;
   case 3:
        cout <<"Enter your temperature: ";
        cin >> input;
        degreec = input;
        break;
   default:
        cout << "You have entered something invalid" << endl;
        cout << "This program will now end " << endl;
        return 0;
   }

   switch(type)
   {
   case 1:
        t = 'k';
        break;
   case 2:
        t = 'f';
        break;
   case 3:
        t = 'c';
        break;
   }


   cout << "Your temperature in Kelvin is ";
   if(type != 1)
   {
       setTempKelvin(degreek,degreec,degreef,t);
   }
   else
   {
       cout << input;
   }
   cout << endl;
   cout << "Your temperature in Celsius is ";
   if(type != 3)
   {
        setTempCelsius(degreef,degreec,degreek,t);
   }
   else
   {
       cout << input;
   }
   cout << endl;
   cout << "Your temperature in Fahrenheit is ";
   if(type != 2)
   {
       setTempFahrenheit(degreef,degreec,degreek,t);
   }
   else
   {
       cout << input;
   }
   cout << endl;

   return 0;
}
Topic archived. No new replies allowed.