其他分享
首页 > 其他分享> > C iostream中的奇怪BUG?

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