处理温度程序
Dealing with a temperature program
我正在使用这本书学习 C++ 两个月:编程原理和使用 C++ 的实践。在错误处理章节的最后,我必须编写一个程序,将度数从摄氏度转换为华氏度以及从华氏度转换为摄氏度,该程序非常简单,但我的问题在于错误处理。
这是我的代码(我使用为本书的读者编写的特殊库):
#include "std_lib_facilities.h"
// convert from Celsius to Fahrenheit and from Fahrenheit to Celsius
int main()
try{
cout << "Please enter a double value representing a temperature : \n";
double val = 0;
cin >> val;
if (cin) {
double df = 9.0 / 5.0 * val + 32; // convert val to a Fahrenheit temperature
double dc = (val - 32) / 1.8; // convert val to a Celsius temperature
cout << "Celsius to Fahrenheit : " << df << '\n';
cout << "Fahrenheit to Celsius : " << dc << '\n';
}
else error("Couldn't read the value"); // if the last input operation fails
}
catch (runtime_error& e) {
cerr << "runtime error : " << e.what() << '\n';
return 1;
}
catch (...) {
cerr << "Oops, something went wrong somewhere\n";
return 2;
}
在我的程序中,我只能(以一种非常简单的方式)处理错误的输入值,但我无法处理因值太大而无法容纳双精度值而可能导致的错误。我以为我可以使用 numeric_limits,但我只能使用作者向我展示的功能。你会如何解决这个问题?您是否允许用户只输入 "plausible" 温度值?或者,如果表示温度的值太高或太低(例如 1500 摄氏度),您会报告错误吗?谢谢您的帮助;)
由于最高(和最低)合理(甚至可能是物理上可能 - http://en.wikipedia.org/wiki/Absolute_hot)温度完全在双倍范围内,我认为应用一些更合理的限制(可以基于在物理上可能的温度或根据具体应用可能更窄)将是正确的方法。
输入超出该范围的值的人可能是犯了错误或者是不怀好意。后者你想停止,但前者你想通过确保你接受的任何值是 "reasonable".
来帮助
如果你想用双倍的容量来限制数字,那么只需勾选std::cin.good()
。它 returns true
当一切正常时, false
当出现问题时(数字太大而不适合双精度数,插入字母而不是数字等)。
我正在使用这本书学习 C++ 两个月:编程原理和使用 C++ 的实践。在错误处理章节的最后,我必须编写一个程序,将度数从摄氏度转换为华氏度以及从华氏度转换为摄氏度,该程序非常简单,但我的问题在于错误处理。 这是我的代码(我使用为本书的读者编写的特殊库):
#include "std_lib_facilities.h"
// convert from Celsius to Fahrenheit and from Fahrenheit to Celsius
int main()
try{
cout << "Please enter a double value representing a temperature : \n";
double val = 0;
cin >> val;
if (cin) {
double df = 9.0 / 5.0 * val + 32; // convert val to a Fahrenheit temperature
double dc = (val - 32) / 1.8; // convert val to a Celsius temperature
cout << "Celsius to Fahrenheit : " << df << '\n';
cout << "Fahrenheit to Celsius : " << dc << '\n';
}
else error("Couldn't read the value"); // if the last input operation fails
}
catch (runtime_error& e) {
cerr << "runtime error : " << e.what() << '\n';
return 1;
}
catch (...) {
cerr << "Oops, something went wrong somewhere\n";
return 2;
}
在我的程序中,我只能(以一种非常简单的方式)处理错误的输入值,但我无法处理因值太大而无法容纳双精度值而可能导致的错误。我以为我可以使用 numeric_limits,但我只能使用作者向我展示的功能。你会如何解决这个问题?您是否允许用户只输入 "plausible" 温度值?或者,如果表示温度的值太高或太低(例如 1500 摄氏度),您会报告错误吗?谢谢您的帮助;)
由于最高(和最低)合理(甚至可能是物理上可能 - http://en.wikipedia.org/wiki/Absolute_hot)温度完全在双倍范围内,我认为应用一些更合理的限制(可以基于在物理上可能的温度或根据具体应用可能更窄)将是正确的方法。
输入超出该范围的值的人可能是犯了错误或者是不怀好意。后者你想停止,但前者你想通过确保你接受的任何值是 "reasonable".
来帮助如果你想用双倍的容量来限制数字,那么只需勾选std::cin.good()
。它 returns true
当一切正常时, false
当出现问题时(数字太大而不适合双精度数,插入字母而不是数字等)。