【发布时间】:2021-08-02 22:18:00
【问题描述】:
我在获取 pset1/cash 的正确解决方案时遇到了一些麻烦。当我当前的“欠款”值等于硬币面额值时,while 循环似乎无法识别。例如,这是我的 10 美分代码(我添加了不断打印的值以帮助诊断):
printf("%f\n", change);
printf("%i\n", coins);
while (change >= 0.100000)
{
change -= 0.10;
coins++;
}
printf("%f\n", change);
printf("%i\n", coins);
while (change >= 0.0500000)
{
change -= 0.05;
coins++;
}
printf("%f\n", change);
printf("%i\n", coins);
这是这些段的输出:
0.200000
16
0.100000
17
0.050000
18
所以我们还剩下 0.200000 作为所欠的零钱,因此它正确地检测到该值 >= .100000,从当前值中减去 0.10 并将硬币计数器加 1。但是,它没有认识到 .100000 的下一个当前值等于 while 循环中规定的 0.100000,而是继续下一个 while 循环并正确检测到确实是 .100000 >= .05 并减去 .05。为什么 while 循环不能识别 .100000 >= .100000 为 True?
我尝试在 while 循环中添加和减去 0 以尝试让它识别这个事实。
谢谢!
【问题讨论】:
标签: while-loop cs50