簡體   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