我正在从书中做一些基本的东西"原理与实践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;
}
答案 0 :(得分:0)
要避免这种情况,例如50e
被解析为浮点数,您可以使用getline
作为字符串在行中读取,并找到字母位置。然后使用例如解析数字部分(字母位置之前)。 std::stod
。
对于使用UTF-8控制台i / o库(我想到的唯一合理的i / o stdlib)和实际“€”和“¥”的想法,请注意这些字符使用多个char
值表示为UTF-8(与switch
直接使用有点不兼容,尽管您可以map
将它们转换为数字货币ID,并且它们可以是很难打字。
也就是说,UTF-8控制台i / o对于这种特殊情况有其自身的问题。