一个案例'没有在一个简单的开关中工作'声明

时间:2018-02-17 02:33:06

标签: c++ switch-statement

我正在从书中做一些基本的东西"原理与实践C ++"我无法解释为什么以下代码对“欧元”不起作用?输出

例如,如果我输入50e,它会向我显示default个案并说"Sorry, I don't recognise ' ' as a currency."但是,如果我用空格键入50 e,它就会起作用。其他案例都不需要空格。

我无法解决这个问题。我知道这是基本的,但我还在学习。

以下是代码:

int main()
{
    const double yen_to_dollar = 0.0094;
    const double euro_to_dollar = 1.24;
    const double pound_to_dollar = 1.40;
    double amount = 0.0;
    char currency = 0;
    cout<<"Please enter how much money you have followed by 'e' 'y' or 'p' (for euro, yen or pounds):\n";
    cin>>amount>>currency;
    switch (currency){
        case 'y':
            cout << amount << " Yen == " << yen_to_dollar*amount << " Dollars\n";
            break;
        case 'p':
            cout << amount << " Pounds == " << pound_to_dollar*amount << " 
            Dollars\n";
            break;
        case 'e':
            cout << amount << " Euros == " << euro_to_dollar*amount <<" Dollars\n";
            break;

        default:
            cout << "Sorry, I don't recognise '" << currency << "' as a currency.\n";
    }
    return 0;
}

1 个答案:

答案 0 :(得分:0)

要避免这种情况,例如50e被解析为浮点数,您可以使用getline作为字符串在行中读取,并找到字母位置。然后使用例如解析数字部分(字母位置之前)。 std::stod

对于使用UTF-8控制台i / o库(我想到的唯一合理的i / o stdlib)和实际“€”和“¥”的想法,请注意这些字符使用多个char值表示为UTF-8(与switch直接使用有点不兼容,尽管您可以map将它们转换为数字货币ID,并且它们可以是很难打字。

也就是说,UTF-8控制台i / o对于这种特殊情况有其自身的问题。