超级简单的货币转换开关行为奇怪
super simple currency converter switch acting oddly?
这是一个来自使用c++ 的原理和实践的练习,使用if检查然后用开关重新制作一个基本的货币转换器。除了我的中间开关,一切都运行得很好。它似乎不像程序的其他部分那样起作用。其他每个人都可以输入像111y, 111p这样的数据,但是当使用欧元时,它需要一个空格,否则它将转到默认开关。我设置了一个断点,货币没有设置为e或e,只有欧元!
我希望这不是什么太愚蠢的事情,但它让我感到困惑Bjarne没有解释这个:p我没有#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;
}
由于dollar
是double
,当您提取它时,E
或e
被解释为数字指数的一部分(如2e-2
)。由于它后面没有数字,所以提取没有完成,cin
进入fail
状态。然后跳过对currency
的读取,从不改变' '
的初始值。当输入空格时,dollar
的提取在空格处结束,并按预期读取currency
。
要修复它,您可以尝试几种方法。您可以要求在金额和货币指示符之间使用空格。您可以将其作为字符串读入,然后尝试自己解析它。你可以选择一个不同的符号来表示欧元。
在任何情况下,您应该检查cin
的状态后,您完成了读取。
相关文章:
- 既然存在危险,为什么项目要使用-I include开关
- 我正在尝试使用 c++ 创建一个货币转换程序,我不知道如何继续
- C++嵌套if语句,基本货币交换
- 为什么这个音频包络不能通过开关的情况?
- 有人知道为什么在开关中使用stoi函数会返回恒定的错误吗
- C 和 C++ 中开关语句的案例标签的常量值,但显示不同的行为
- 在 c++ 中在开关情况下使用和不使用"break"时的不同输出
- 为什么我的开关/机箱在使用枚举时默认?
- 为什么布尔开关语句有编译器警告?
- 如何使用"equal to"以外的评估编写开关语句
- 为什么开关的优化方式与 c/c++ 中的链接不同?
- 无法找到简单的开关大小写枚举错误
- 未达到的情况会影响开关外壳性能
- C++:我的开关盒循环转到第一种情况
- 有没有办法在C++将字符串与开关语句一起使用?
- 开关:无外壳中断
- 带有开关语句的 do-while 循环 -- 无穷循环错误
- 将编译器开关添加到 Eclipse CDT 内置编译器设置生成?
- C++ -- 如何使用开关语句和恒量获得有效的货币转换器
- 超级简单的货币转换开关行为奇怪