[英]Strange BUG in C++ iostream?
这是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
输入的问题吗?
不,这不是 C ++流类中的错误。
您需要将输入读入为std::string
并自行提取值和货币。
这是因为e
用于以科学记数法分隔有效数和指数 ,这是指定double
精度的另一种方式。 因为它缺少定义指数的部分,因此10e
是无效的double
精度。
顺便说一下,使用GBP,EUR和JPY(这是您想要支持的货币的ISO代码)将不那么特殊。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.