【发布时间】:2017-11-02 09:52:43
【问题描述】:
这是 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' 或
'5 p'或
'3y' 或
“3 岁”或
'1 z' 或
1z' 或
'10 e'
一切都按预期进行。
当输入为'(anyting)e' 时,它是一个错误(如'5e')
我已经尝试了几乎所有方法以使其正常工作,但没有成功。
当我删除 while() 循环时,我在输入 '5e' 时得到此输出 ->
"Sorry, unknown valute ( )" 但是当我输入时可以说'7m' 我得到输出"Sorry, unknown valute (m)."
我认为这很重要,因为在大型代码中,这可能是一个几乎不可能注意到的错误。
'e' 在某些情况下作为char 输入是否存在问题?
【问题讨论】:
-
我猜
e被解析为浮点指数的一部分。 -
是的,'5e2' 与 '500' 一样,所以它缺少输入的其余部分,这就是它变成无限循环的原因。谢谢,上帝保佑
-
@tobi303 将
7m读取为 double 是明确定义的:它应该读取7并将m留在流中 -
@M.M 哦,真的吗?然后我学到了一些东西;)
-
经验法则:当问题是“数百万人使用的这个库中是否存在错误”时,答案很可能是“否”。在使用 C++ 20 年后,我仍然使用这个假设。