[英]How do I format my two function outputs so they are next to each other?
Im working on this for class but I am getting stuck with getting the right output.我正在为课堂做这件事,但我一直无法获得正确的输出。
#include<iostream>
using namespace std;
double celsiusToFahrenheit (double);
double fahrenheitToCelsius (double);
int main ()
{
double f;
double c;
cout.setf (ios::fixed);
cout.precision (2);
cout << "Celsius \t" << "Fahrenheit \t" << "| \t" << "Fahrenheit \t" << "Celsius" << endl;
cout << fahrenheitToCelsius (c) << "\t\t" << celsiusToFahrenheit (c) <<
endl;
return 0;
}
double celsiusToFahrenheit (double f)
{
double fahrenheit;
for (double celsius = 40.0; celsius >= 31.0; celsius--)
{
fahrenheit = (9.0 / 5.0) * celsius + 32.0;
cout << celsius << "\t\t" << fahrenheit << "\t\t|" << endl;
}
return fahrenheit;
}
double fahrenheitToCelsius (double c)
{
double celsius;
for (double fahrenheit = 120.0; fahrenheit >= 30.0;
fahrenheit = fahrenheit - 10)
{
celsius = (fahrenheit - 32.0) * 5.0 / 9.0;
cout << fahrenheit << "\t\t" << celsius << endl;
}
cout << endl;
return celsius;
}
what i get when i run the code当我运行代码时我得到了什么
Celsius Fahrenheit |摄氏华氏| Fahrenheit Celsius华氏度
40.00 104.00 | 40.00 104.00 |
39.00 102.20 | 39.00 102.20 |
38.00 100.40 | 38.00 100.40 |
37.00 98.60 | 37.00 98.60 |
36.00 96.80 | 36.00 96.80 |
35.00 95.00 | 35.00 95.00 |
34.00 93.20 | 34.00 93.20 |
33.00 91.40 | 33.00 91.40 |
32.00 89.60 | 32.00 89.60 |
31.00 87.80 | 31.00 87.80 |
120.00 48.89 120.00 48.89
110.00 43.33 110.00 43.33
100.00 37.78 100.00 37.78
90.00 32.22 90.00 32.22
80.00 26.67 80.00 26.67
70.00 21.11 70.00 21.11
60.00 15.56 60.00 15.56
50.00 10.00 50.00 10.00
40.00 4.44 40.00 4.44
30.00 -1.11 30.00 -1.11
-1.11 87.80 -1.11 87.80
There is one design flaw in your approach.您的方法存在一个设计缺陷。
You assigned additional tasks to your conversion functions "celsiusToFahrenheit" and "fahrenheitToCelsius".您为转换函数“celsiusToFahrenheit”和“fahrenheitToCelsius”分配了额外的任务。 In your approach they do also generate output.在您的方法中,它们也会生成输出。 The functionalities / tasks should be separated in your program.功能/任务应该在您的程序中分开。 You may have even noticed, that you do not use the functions parameters.您甚至可能已经注意到,您没有使用函数参数。
So, let us redesign and refactor the code and do some improvements:所以,让我们重新设计和重构代码并做一些改进:
Please note.请注意。 There are many many different solutions.有许多不同的解决方案。 Other solutions are also very much shorter.其他解决方案也非常短。 But I created this "verbose" solution for you to get a better understanding.但我创建了这个“详细”的解决方案,以便您更好地理解。 Please see that I added many comments in the code.请看我在代码中添加了很多注释。 This should always be done.应该始终这样做。 Otherwise nobody else will understand what is coded, and even you will not understand it one month later.否则没有人会理解编码的内容,甚至一个月后您也不会理解。 . . . .
#include<iostream>
#include<iomanip>
#include<string>
#include<algorithm>
// The ranges for that we will do the calculations
// For Fahrenheit values to be converted into Celcius
constexpr double FahrenheitStart = 120.0; // Start value (inclusive)
constexpr double FahrenheitEnd = 0.0; // End value (inclusive)
constexpr double FahrenheitStep = 5; // Decrement step
// For Celcius values to be converted into Fahrenheit
constexpr double CelsiusStart = 30.0; // Start value (inclusive)
constexpr double CelsiusEnd = -5.0; // End value (inclusive)
constexpr double CelsiusStep = 1.0; // Decrement step
// Global texts that may be used in different places
constexpr std::string_view Fahrenheit{ "Fahrenheit" };
constexpr std::string_view Celcius{ "Celcius" };
// The delimiter
constexpr std::string_view Delimiter{ " | " };
// The field width of the columns shall be the maximum text length +1
constexpr size_t FieldWidth = std::max(Fahrenheit.length(), Celcius.length()) + 1;
// Conversion functions
double celsiusToFahrenheit(const double celsius) {
return (9.0 / 5.0) * celsius + 32.0;
}
double fahrenheitToCelsius(const double fahrenheit) {
return (fahrenheit - 32.0) * 5.0 / 9.0;
}
// Print a conversion list for temperatures in Fahrenheit and Celcius
int main()
{
// Set ios flags and print header
std::cout << std::right << std::setiosflags(std::ios::fixed) << std::setprecision(2) <<
std::setw(FieldWidth) << Celcius << std::setw(FieldWidth) << Fahrenheit << Delimiter <<
std::setw(FieldWidth) << Fahrenheit << std::setw(FieldWidth) << Celcius << "\n";
// Set start values for conversion functions
double f = FahrenheitStart;
double c = CelsiusStart;
// We want to run a loop;
bool doCalculation = true;
// Calculate all values
while (doCalculation) {
// We assume that we are maybe done with all values
doCalculation = false;
// Check, if we have printed all Celcius values
if ((c >= CelsiusEnd)) {
// Print Celcius values and its conversions
std::cout << std::setw(FieldWidth) << c << std::setw(FieldWidth) << celsiusToFahrenheit(c) << Delimiter;
// Calculate next value to convert
c -= CelsiusStep;
// No, not done, continue the loop
doCalculation = true;
}
else {
// If all Celcius values have been printed already, then print spaces, if needed
if (f >= FahrenheitEnd) std::cout << std::setw(FieldWidth * 2) << "" << Delimiter;
}
// Check, if we have printed all Fahrenheit values
if (f >= FahrenheitEnd) {
// Print Fahrenheit values and its conversions
std::cout << std::setw(FieldWidth) << f << std::setw(FieldWidth) << fahrenheitToCelsius(f);
// Calculate next value to convert
f -= FahrenheitStep;
// No, not done, continue the loop
doCalculation = true;
}
std::cout << "\n";
}
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.