【发布时间】:2015-01-14 14:28:04
【问题描述】:
我正在做一个关于货币兑换的练习。程序应该从输入流中读取货币的数量和名称,并以本国货币返回其值。
double amount = 0.0;
std::string currency = " ";
std::cout << "Please enter amount and currency ('usd','eur' or 'rub'):" << std::endl;
std::cin >> amount >> currency;
std::cout << amount << currency << std::endl;
if ( currency == "usd") {
...;
} else if ( currency == "eur" ) {
...;
} else if ( currency == "rub" ) {
...;
} else {
std::cout << "Input error: unknown currency..." << std::endl;
}
我在这个程序中遇到了一个关于 std::cin 的奇怪问题。当输入“100usd”或“100rub”时,程序分别回显“100usd”或“100rub”并继续正常工作。但是当我输入“100eur”时,它会回显“0”并给出“输入错误...”行。同时,如果我输入“100 eur”,程序会回显“100eur”并且工作正常。在前两种情况下,我是否添加空格没有区别。
我做错了什么?
【问题讨论】:
-
那是因为你可以用科学记数法写一个 double (涉及字母 e)但 eur 中的其余字母对此无效,因此解析失败。
-
这就是为什么你不使用
std::istream::operator>>而是使用std::getline然后自己解析输入。另外,不要使用浮动-因为它是不准确的,所以点数的钱。 -
@TheParamagneticCroissant:“不要用浮点数来赚钱”——为什么不呢?只有在处理真实交易或有其他原因需要准确表示时才会出现问题。