我使用本书学习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,但我可以使用作者向我展示的功能。你会如何解决这个问题?你会允许用户输入合理的&#34;温度值?或者,如果表示温度的值太高或太低(如1500摄氏度),您会报告错误吗?感谢您的帮助;)
答案 0 :(得分:4)
由于最高(和最低)合理(甚至可能在物理上可能 - http://en.wikipedia.org/wiki/Absolute_hot)温度完全在双倍的范围内,我认为应用一些更合理的限制(可能基于物理上可能的温度或甚至可能根据具体应用甚至更窄)将是正确的方法。
输入超出该范围的值的人可能犯了错误或者没有任何好处。后者你想停止,但前者你想通过确保你接受的任何值是“合理的”来帮助。
答案 1 :(得分:3)
如果您希望限制数量达到双倍容量,那么只需检查std::cin.good()
即可。当一切正常时它返回true
,当出现问题时返回false
(数字太大而不适合双重,插入一个字母而不是数字等)。