非常新的程序员有一个看似晦涩的问题:
string currency = "???";
double amount = 0.0;
double amount_final = 0.0;
cin >> amount >> currency;
if (currency == "GBP"){
amount_final = amount*1.47;
}
else if (currency == "Yen"){
amount_final = amount*0.0083;
}
else if(currency == "Euro"){
amount_final = amount*1.07;
一切正常,除非您输入“Euro”,在这种情况下,它就像您没有输入任何内容一样返回初始值。 一些测试告诉我,我遇到问题的唯一一次是如果字符串的第一个字母是 E 或 e 并且前面没有空格,我尝试的任何其他值都可以正常工作。
TL;DR:如果除了“Euro”之外我什么都不更改为“Fish”,程序会运行,这是怎么回事?
最佳答案
float 解析器是贪婪的,它从输入流中消耗代表指数的“E”,留下“uro”作为输入流的其余部分。
基本上贪婪解析在这里失败了,因为它是一个需要先行 1 的语法。(“E”后跟数字)。
关于c++ - 未使用某些文字读取输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29163696/