c++ - 未使用某些文字读取输入

标签 c++ string cin

非常新的程序员有一个看似晦涩的问题:

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/

相关文章:

c++ - 如何阻止 C++ 控制台应用程序立即退出?

c++ - 避免错误的用户输入(当要求的是整数时为字符串)

c++ - cin 对象 - C++

java 。如何在每个第 n 个空格上拆分具有多个空格的字符串?

java - 循环不会多次迭代 if 语句

c++ - Cin循环永不终止

c++ - 如何检查模板参数是否为 std::variant?

c++ - 强制 CMake 在每次构建时生成 configure_file 目标

C++:如何创建多类型和多维数组格式?

使用字符串进行Python对象匹配