gpt4 book ai didi

c++ - 意外的 DO-WHILE 行为 : Is it ignoring the expression?

转载 作者:行者123 更新时间:2023-11-30 01:16:38 26 4
gpt4 key购买 nike

我有一些 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 来跟踪 cents 的数量,而不是使用 double 来跟踪美元。

更详细地说,问题是值 0.05 不能用二进制 float 精确表示。它可能真的是 0.0499999999999,这不是您想要的。当您将此值与您的目标值进行比较时,比较结果是“是的,少了”,甚至认为它可能只少了 0.0000000000001 美分。

关于c++ - 意外的 DO-WHILE 行为 : Is it ignoring the expression?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26223795/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com