这是 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;
}
当键盘输入为
'5p' or
'5 p' or
'3y' or
'3 y' or
'1 z' or
1z' or
'10 e'
一切都按预期进行。
当输入为'(anyting)e'
这是一个错误(比如'5e'
)
我已经尝试了几乎所有的方法来让它发挥作用,但没有成功。
当我删除时while()
循环输入时我得到这个输出'5e'
->
"Sorry, unknown valute ( )"
但是当我进入时可以说'7m'
我得到输出"Sorry, unknown valute (m)."
我认为这是一件大事,因为在大型代码中,这可能是一个几乎不可能注意到的错误。
是'e'
一个问题如char
在某些情况下输入?
When a std::istream
or std::locale
库函数尝试解析任何数字输入,它总是首先抓取集合中的所有连续字符"0123456789abcdefxABCDEFX+-"
以及哪些可能对于正在完成的转换类型有效,然后才尝试确定它们的含义。参见描述第二阶段num_get加工 https://timsong-cpp.github.io/cppwp/facet.num.get.virtuals#3.
所以在你的"5e"
例如,operator>>(double&)
函数同时抓取'5'
and 'e'
,期望在之后找到指数'e'
,但停在那里,这些字符不能构成有效的完整double
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)