繁体   English   中英

意外的DO-WHILE行为:是否忽略表达式?

[英]Unexpected DO-WHILE behavior: Is it ignoring the expression?

我有一些C ++作业,但被一些意外行为所卡住。 以下代码是所讨论程序的一部分:

void tenderMoney(Candy& _Candy, CoinCount& _Coins){

const double amountToPay = _Candy._Price;
int coinTendered = 0;
double totalTendered = 0;

do {
    cout << "Insert a coin: ";

    if (cin >> coinTendered){

        switch (coinTendered){
        case 5: {
            totalTendered += 0.05;
            _Coins._Nickels++;
            break;
        }
        case 10: {
            totalTendered += 0.10;
            _Coins._Dimes++;
            break;
        }
        case 25: {
            totalTendered += 0.25;
            _Coins._Quarters++;
            break;
        }
        default:
            break;
        }
    }
    else {
        cout << "Invalid coin. ";
        cin.clear();
        cin.ignore();
    }
  } while (totalTendered < amountToPay);
}

该功能适用​​于除.05美分以外的所有硬币。 即使(totalTendered < amountToPay)计算为相等的值,它也会要求额外的硬币。 任何人都可以弄清楚我的问题可能是什么?

注意:对象是从它们各自的vector容器中引用的。 随意请求您可能认为相关的任何其他代码。

您被浮点数舍入错误所困扰 使用int跟踪美分数 ,而不是使用double跟踪美元。

更具体地说,问题是值0.05不能精确地用二进制浮点表示。 可能确实是0.0499999999999,这并不是您想要的。 当您将其与目标值进行比较时,比较结果是“是的,即更少”,甚至认为它可能仅减少0.0000000000001美分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM