超级简单的货币转换开关行为奇怪

super simple currency converter switch acting oddly?

本文关键字:开关 货币 转换 超级简单      更新时间:2023-10-16

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

我希望这不是什么太愚蠢的事情,但它让我感到困惑Bjarne没有解释这个:p我没有#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;
}

由于dollardouble,当您提取它时,Ee被解释为数字指数的一部分(如2e-2)。由于它后面没有数字,所以提取没有完成,cin进入fail状态。然后跳过对currency的读取,从不改变' '的初始值。当输入空格时,dollar的提取在空格处结束,并按预期读取currency

要修复它,您可以尝试几种方法。您可以要求在金额和货币指示符之间使用空格。您可以将其作为字符串读入,然后尝试自己解析它。你可以选择一个不同的符号来表示欧元。

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