这是iostream中的一个错误吗? ...
#include<iostream>
void money_conversion (){
constexpr double dollars_in_yen=0.01;
constexpr double dollars_in_euro=1.16;
constexpr double dollars_in_pound=1.33;
std::cout<<"Supported valutes : yen ('y'), euros('e'), pounds('p').\n";
std::cout<<"Please enter the value + valute that you want to convert into dollars! :";
double value=1;
char valute=0;
while(true){
std::cin>>value>>valute;
if(valute=='y')
std::cout<<"\n\n"<<value<<" yens is "<<value*dollars_in_yen<<" dollars. \n";
else if(valute=='e')
std::cout<<"\n\n"<<value<<" euros is "<<value*dollars_in_euro<<" dollars. \n";
else if(valute=='p')
std::cout<<"\n\n"<<value<<" pounds is "<<value*dollars_in_pound<<" dollars. \n";
else
std::cout<<"\n\nSorry, unknown valute ("<<valute<<").\n";
}
}
int main(){
money_conversion();
return 0;
}
键盘输入
时&#39; 5P&#39;或
&#39; 5 p&#39;或
&#39; 3Y&#39;或
&#39; 3 y&#39;或
&#39; 1 z&#39;或
1Z&#39;或
&#39; 10 e&#39;
一切都按预期进行。
输入为'(anyting)e'
时出现错误(如'5e'
)
我已尝试过几乎所有尝试使它工作但没有成功。
当我删除while()
循环时,我在输入'5e'
时获得此输出 - &gt;
"Sorry, unknown valute ( )"
但是当我输入时我们说'7m'
我得到输出"Sorry, unknown valute (m)."
我认为这很重要,因为在大代码中,这可能是一个几乎不可能注意到的错误。
在某些情况下,'e'
是char
输入问题吗?
答案 0 :(得分:5)
当Array result:
arrTimer: 2.975ms
Object result:
objTimer: 0.068ms
或std::istream
库函数尝试解析任何数字输入时,它始终首先捕获集合std::locale
中的所有连续字符,这些字符可能对转换类型有效正在完成,然后才试图确定它们的含义。请参阅Stage 2 of the num_get
processing的说明。
因此,在"0123456789abcdefxABCDEFX+-"
示例中,"5e"
函数同时抓取operator>>(double&)
和'5'
,期望在'e'
之后找到一个指数,但在那里停止,这些角色不能制作有效的完整'e'
。
答案 1 :(得分:3)
不,这是不 C ++流类中的错误。
您需要在输入中读取std::string
并自行提取值和货币。
这是因为e
用于在科学记数法中分隔有效数字和 exponent ,这是另一种指定方式一个double
。前10e
是无效的double
,因为它缺少定义指数的部分。
顺便说一下,使用GBP,EUR和JPY(这是您想要支持的货币的ISO代码)将不那么特殊。