这是使用C ++的原则和实践的练习,用于制作基本货币转换器,如果检查然后用开关重新制作它。一切都运行得很好,除了我的中间开关。它似乎不像程序的其余部分那样工作。在我输入 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;
}
答案 0 :(得分:2)
由于dollar
是double
,E
或e
会被解释为数字指数的一部分(如2e-2
)提取它。由于之后没有数字,因此提取未完成,cin
进入fail
状态。然后跳过currency
的读取,从不将其从' '
的初始值更改。当您输入空格时,dollar
的提取将在空格处结束,currency
将按预期读取。
要修复它,你可以尝试几件事。您可以要求金额和货币指标之间的空格。您可以将其作为字符串读取并尝试自己解析它。你可以为欧元选择一个不同的符号。
在任何情况下,您应该在阅读完毕后检查cin
的状态。