处理温度程序

时间:2015-02-26 19:12:54

标签: c++ error-handling runtime-error

我使用本书学习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摄氏度),您会报告错误吗?感谢您的帮助;)

2 个答案:

答案 0 :(得分:4)

由于最高(和最低)合理(甚至可能在物理上可能 - http://en.wikipedia.org/wiki/Absolute_hot)温度完全在双倍的范围内,我认为应用一些更合理的限制(可能基于物理上可能的温度或甚至可能根据具体应用甚至更窄)将是正确的方法。

输入超出该范围的值的人可能犯了错误或者没有任何好处。后者你想停止,但前者你想通过确保你接受的任何值是“合理的”来帮助。

答案 1 :(得分:3)

如果您希望限制数量达到双倍容量,那么只需检查std::cin.good()即可。当一切正常时它返回true,当出现问题时返回false(数字太大而不适合双重,插入一个字母而不是数字等)。