How Do You Handle Incorrect Temperature Scale Inputs in C++?

  • Context: C/C++ 
  • Thread starter Thread starter frogdogbb
  • Start date Start date
  • Tags Tags
    Temperature
Click For Summary

Discussion Overview

The discussion revolves around handling incorrect temperature scale inputs in a C++ program designed to convert temperatures between Celsius, Fahrenheit, and Kelvin. Participants are addressing issues related to function implementation, compiler errors, and program logic.

Discussion Character

  • Technical explanation
  • Homework-related
  • Debate/contested

Main Points Raised

  • One participant expresses frustration with the C++ program and seeks help with temperature conversion functions.
  • Another participant suggests that the function should perform calculations without requiring input values for F, C, and K in the main function.
  • Concerns are raised about the infinite loop in the function due to the scale value not being altered.
  • A suggestion is made to pass the temperature scale variables by reference rather than by value, proposing a function prototype change.
  • There is a question about how to perform comparisons without initial values for the scale variable.
  • A participant shares a revised version of the program that includes multiple functions for temperature conversion, indicating it works but is not aesthetically pleasing.
  • Another participant questions the redundancy of output statements in the revised code and raises concerns about user input validation for scale selection.

Areas of Agreement / Disagreement

Participants do not reach a consensus on the best approach to handle temperature scale inputs and function design. Multiple competing views and suggestions remain throughout the discussion.

Contextual Notes

Limitations include unresolved issues regarding input validation for temperature scales and the requirement for the main function to return an integer, which is not addressed in the provided code.

frogdogbb
Messages
45
Reaction score
0
I know I am not a moron but this C++ is killing me, I have to write a program using functions to convert temp between c, f, k I am hung up

// Mod4project2tempconvert.cpp : Defines the entry point for the console application.
#include <iostream>
using namespace std;

double ftemp (double F, double C, double K, double temp, double scale)

{
while (scale != 0)
{
if (scale==C);
F=temp*9/5+32;
K=temp+273.15;

if (scale==F);
C=(temp-32)*5/9;
K=(temp-32)*5/9+273.15;

if (scale==K);
F=(temp-273.15)*9/5+32;
C=temp-273.15;
}
}


int main()
{
double F, C, K, temp, scale;
count<<"Enter the scale you want to convert from C, F, or K- 0 to quit: ";
cin >> scale;

count<<"\nEnter temperature";
cin >> temp;
count<<"\nCongratulations you entered "
<<scale<<"The following results are your converted temperatures "
<<ftemp(C, F, K)<<endl;

return 0;
}

Any help?
Thanks
 
Technology news on Phys.org
maybe this is closer

// Mod4project2tempconvert.cpp : Defines the entry point for the console application.
#include <iostream>
using namespace std;

double ftemp (double F, double C, double K, double temp, double scale)

{
while (scale != 0)
{
if (scale==C)
{
F=temp*9/5+32;
K=temp+273.15;
}

if (scale==F)
{
C=(temp-32)*5/9;
K=(temp-32)*5/9+273.15;
}

if (scale==K)
{
F=(temp-273.15)*9/5+32;
C=temp-273.15;
}
}
}


int main()
{
double F, C, K, temp, scale;
count<<"Enter the scale you want to convert from C, F, or K- 0 to quit: ";
cin >> scale;

count<<"\nEnter temperature";
cin >> temp;
count<<"\nCongratulations you entered "
<<scale<<"The following results are your converted temperatures "
<<ftemp(F, C, K)<<endl;

return 0;
}

I only get one complier error:ftemp does not require 3 arguments
...
 
Where are you inputting the values of F, C and K in main?
 
Presumably because he wants the function to just do the calculation.

He posted this also in "homework help" where I suggested that he pass the F,K,C variables by "reference" rather than by "value".
 
exactly what is the function suppose to do...
what is the return "double"variable? and the compiler error you get should be easily solved...look at your function definition and look at your function call

as for your function itself, it will either enter a infinite loop because you haven't altered the scale value or while (scale != 0){...} or you won't use the function itself because scale==0.
 
HallsofIvy said:
...I suggested that he pass the F,K,C variables by "reference" rather than by "value".

this is the answer your looking fordouble ftemp (double F, double C, double K, double temp, double scale)
you don't return a double;
your function prototype may be something like:
void ftemp (double* F, double* C, double* K, double temp, double scale)

and pass the variables like:
ftemp(&F, &C, &K, temp, scale)but you will still need to output to screen the values.
 
Last edited:
Even if you pass the variables by reference how do you expect to do this type of comparison without having an intial value:

if (scale==C)
 
dduardo said:
Even if you pass the variables by reference how do you expect to do this type of comparison without having an intial value:

if (scale==C)

i would have rewritten the code and give the correct answer but this is "homework help" and therefore i don't want to give the full answer.
 
Well...

I had it figured out with a more consise program but I accidently earsed it. So I had to redo it it works and should be more than enough to get me a 100% even though it is not as pretty as I would like.

// mod4project2.cpp : Defines the entry point for the console application.
#include <iostream>
using namespace std;

double kscale (double);
double fscale (double);
double cscale (double);
double kscale1 (double);
double fscale1 (double);
double cscale1 (double);

int main()
{
double k, f, c, temp;
char scale;
count<<"Enter temperature: ";
cin>>temp;
count<<"\nEnter scale C, F, or K: ";
cin>>scale;

if (scale=='k' || scale=='K')
{
k= temp;
f=kscale (temp);
c= kscale1 (temp);
count<<"\n K= "<<k<<"\n C= "<<c<<"\n F= "<<f<<endl;
}

else if (scale=='f' || scale=='F')
{
f= temp;
k= fscale (temp);
c= fscale1 (temp);
count<<"\n K= "<<k<<"\n C= "<<c<<"\n F= "<<f<<endl;
}
else if (scale=='c' || scale=='C')
{
c= temp;
k= cscale(temp);
f= cscale1(temp);
count<<"\n K= "<<k<<"\n C= "<<c<<"\n F= "<<f<<endl;
}
}

double kscale (double temp)
{
double f;
f=((temp-273.15)*(9/5))+32;
return f;
}
double kscale1 (double temp)
{
double c;
c=temp-273.15;
return c;
}

double fscale (double temp)
{
double k;
k=((temp-32)*(5/9))+273.15;
return k;
}

double fscale1 (double temp)
{
double c;
c=(temp-32)*(5/9);
return c;
}

double cscale (double temp)
{
double k;
k=temp+273.15;
return k;
}
double cscale1 (double temp)
{
double f;
f=(temp*9/5)+32;
return f;
}
Thanks for the suggestions.
 
  • #10
this code looks ugly yet it may do as you wish.
does the code need to have
Code:
cout<<"\n K= "<<k<<"\n C= "<<c<<"\n F= "<<f<<endl;
written three times?

question:
Code:
cout<<"\nEnter scale C, F, or K: ";
cin>>scale;
what happens if a user doesn't enter C,F or K?

plus your main doesn't return a int which is required by ansii
 
Last edited:

Similar threads

  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 6 ·
Replies
6
Views
13K
  • · Replies 17 ·
Replies
17
Views
2K
Replies
12
Views
2K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 18 ·
Replies
18
Views
11K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 6 ·
Replies
6
Views
5K