C iostream中的奇怪BUG?
作者:互联网
这是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 y”或
>“ 1 z”或
> 1z’或
> ’10 e’
一切都按预期进行.
当输入为'(anyting)e’时,显示错误(例如’5e’)
我已经尝试了几乎所有方法来使它起作用,但是没有成功.
当我删除while()循环时,输入“ 5e”时得到此输出->
“对不起,未知值()”,但是当我输入时说“ 7m”时,输出为“对不起,未知值(m)”.
之所以如此,是因为在大代码中,这几乎是不可能发现的错误.
在某些情况下,作为字符输入的’e’是问题吗?
解决方法:
不,这不是C流类中的错误.
您需要以std :: string的形式读取输入内容,然后自己提取值和货币.
这是因为e用于用科学计数法将有效数和指数分开,这是指定double的另一种方式. 10e之前是无效的双精度数,因为它缺少定义指数的部分.
顺便说一句,使用GBP,EUR和JPY(这是您要支持的货币的ISO代码)会减少特质.
标签:c,iostream 来源: https://codeday.me/bug/20191012/1898296.html