超级简单的货币转换器开关奇怪吗?

时间:2013-06-06 02:59:32

标签: c++

这是使用C ++的原则和实践的练习,用于制作基本货币转换器,如果检查然后用开关重新制作它。一切都运行得很好,除了我的中间开关。它似乎不像程序的其余部分那样工作。在我输入 111y,111p 这样的数据时,其他每一个都没问题,但是当使用欧元时,它需要一个空格,否则它将进入默认开关。我做了一个断点,货币没有设置为e或E,只有欧元!

我希望它不是什么太傻,但它让我感到困惑Bjarne没有解释这一点:PI在代码中没有 #include iostream ,因为它全部用*处理std_lib_facilities *只是想在有人指出它之前说出XD

#include "std_lib_facilities.h"

using namespace std;

int main()
{
    double dollar = 0;
    char currency = ' ';
    const double yen = 0.010;
    const double euro = 1.31;
    const double pound = 0.65;
    double sum = 0;

    cout << "Please enter amount and Y for yen or E for Euro or P for pound.\n";
    cin >> dollar >> currency;

    switch(currency)
    {
        case 'Y': case'y':
        {
            sum = dollar * yen;
            cout << dollar << " is equal to " << sum << " yen.\n";
            break;
        }
        case 'E': case'e':
        {
            sum = dollar * euro;
            cout << dollar << " is equal to " << sum << " euro.\n";
            break;
        }
        case 'P': case'p':
        {
            sum = dollar * yen;
            cout << dollar << " is equal to " << sum << " pound.\n";
            break;
        }
        default:
            cout << "Wrong values...\n";
            break;
    }
    keep_window_open();
    return 0;
}

1 个答案:

答案 0 :(得分:2)

由于dollardoubleEe会被解释为数字指数的一部分(如2e-2)提取它。由于之后没有数字,因此提取未完成,cin进入fail状态。然后跳过currency的读取,从不将其从' '的初始值更改。当您输入空格时,dollar的提取将在空格处结束,currency将按预期读取。

要修复它,你可以尝试几件事。您可以要求金额和货币指标之间的空格。您可以将其作为字符串读取并尝试自己解析它。你可以为欧元选择一个不同的符号。

在任何情况下,您应该在阅读完毕后检查cin的状态。