1

这是一项来自使用 C++ 的原则和实践的练习,使用 if 检查然后用开关重新制作它来制作基本的货币转换器。除了我的中间开关之外,一切都运行得很好。它似乎不像程序的其余部分那样工作。我输入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;
}
4

1 回答 1

2

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

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

在任何情况下,你都应该在cin读完之后检查它的状态。

于 2013-06-06T03:03:25.140 回答