作者:Superficial1987542_y3 | 来源:互联网 | 2023-01-10 15:17
这是iostream中的一个错误吗?...
#include
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"<
键盘输入时
'5p'或
'5 p'或
'3y'或
'3年'或
'1 z'或
1z'或
'10 e'
一切都按预期进行.
当输入是'(anyting)e'
一个错误(像'5e'
)时,我已经尝试了几乎所有的东西,试图让它工作,但没有成功.
当我删除while()
循环时我输入这个输出 '5e'
- >
"Sorry, unknown valute ( )"
但是当我输入时我说'7m'
得到输出"Sorry, unknown valute (m)."
我认为这是一个大问题,因为在大代码中,这可能是一个几乎不可能注意到的错误.是'e'
一个问题,因为char
在某些情况下输入?
1> aschepler..:
当一个std::istream
或std::locale
库函数试图解析任何数字输入时,它总是先捕获集合中的所有连续字符,这些字符"0123456789abcdefxABCDEFX+-"
可能对正在进行的转换类型有效,然后才会尝试确定它们的含义.请参阅处理阶段2num_get
的说明.
所以在你的"5e"
例子中,operator>>(double&)
函数抓住两者,'5'
并'e'
期望在之后找到一个指数'e'
,但在那里停止,并且那些字符不能生成有效的完整double
.