coint(投标){ 开关(共投标){ 案例5:{ 总投标量+=0.05; _硬币; 打破 } 案例10:{ 总投标量+=0.10; _硬币; 打破 } 案例25:{ 投标总额+=0.25; _硬币; 打破 } 违约: 打破 } } 否则{ cout,c++,C++" /> coint(投标){ 开关(共投标){ 案例5:{ 总投标量+=0.05; _硬币; 打破 } 案例10:{ 总投标量+=0.10; _硬币; 打破 } 案例25:{ 投标总额+=0.25; _硬币; 打破 } 违约: 打破 } } 否则{ cout,c++,C++" />

意外的DO-WHILE行为:是否忽略表达式? 我有一些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); } void tenderMoney(糖果和糖果、硬币计数和硬币){ const double amountToPay=糖果价格; int cointed=0; 双总投标=0; 做{ cout>coint(投标){ 开关(共投标){ 案例5:{ 总投标量+=0.05; _硬币; 打破 } 案例10:{ 总投标量+=0.10; _硬币; 打破 } 案例25:{ 投标总额+=0.25; _硬币; 打破 } 违约: 打破 } } 否则{ cout

意外的DO-WHILE行为:是否忽略表达式? 我有一些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); } void tenderMoney(糖果和糖果、硬币计数和硬币){ const double amountToPay=糖果价格; int cointed=0; 双总投标=0; 做{ cout>coint(投标){ 开关(共投标){ 案例5:{ 总投标量+=0.05; _硬币; 打破 } 案例10:{ 总投标量+=0.10; _硬币; 打破 } 案例25:{ 投标总额+=0.25; _硬币; 打破 } 违约: 打破 } } 否则{ cout,c++,C++,您正被浮点舍入错误所困扰。使用int来跟踪美分的数量,而不是使用double来跟踪美元 更详细地说,问题是值0.05不能用二进制浮点精确表示。它可能真的是0.049999999999,而这并不是您想要的。当您将其与目标值进行比较时,比较结果是“是的,这更少”甚至认为它可能只少了0.0000000000001美分。你被浮点舍入错误所困扰。使用int来记录美分的数量,而不是使用双精度来记录美元 更详细地说,问题是值0.05不能用二进制浮点精确表示。它可能真的是0.049999999999,而这并不是

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

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

你被浮点舍入错误所困扰。使用
int
来记录美分的数量,而不是使用
双精度来记录美元


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

因此,基于这一点,有效的硬币之所以这样做,是因为它们略大于
amountToPay
?对,您的其他硬币可能略大于或略小于您想要的确切数量。您肯定希望在这里使用整数美分,以及问题将消失。因此,基于此,有效的硬币之所以这样做,是因为它们略大于
amountToPay
?对,您的其他硬币可能略大于或略小于您想要的确切数量。您肯定希望在这里使用整数分,这些问题将消失。