处理温度程序

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 当出现问题时(数字太大而不适合双精度数,插入字母而不是数字等)。