所以我正在使用cs50,并且正在执行贪婪算法的“现金”问题,并且编写的代码可以很好地编译,但是当我运行它时,它会要求“更改美元金额:”,然后从不接受有效的响应,我被卡住了,永远无法输入信息。
一个朋友说我缺少输入,这就是为什么它不起作用的原因,但是我正尝试使用用户的输入,所以...非常感谢您的帮助,因为我认为我确实接近,我只是不知道如何解决它,help50表示从技术上讲没什么错,所以我只是停滞不前。
谢谢!
#include <cs50.h>
#include <stdio.h>
#include <math.h>
int main(void)
{
// identifying variables
float amount;
int cents;
int count = 0;
// prompting user for input
do
{
amount = get_float("Change amount in USD: ");
}
// ensuring a positive number
while (amount < 0);
//changing float to an int
cents = round(amount*100);
// using highest denomination first (quarters)
while (cents % 25 >= 0)
{
count++;
cents = cents % 25;
}
// using next highest denomination second (dimes)
while (cents % 10 >= 0)
{
count++;
cents = cents % 10;
}
// using next highest denomination third (nickels)
while (cents % 5 >= 0)
{
count++;
cents = cents % 5;
}
// using last denomination amount (pennies)
while (cents % 1 >= 0)
{
count++;
cents = cents % 1;
}
// displays number of coins used
printf("%i\n", count);
}
答案 0 :(得分:1)
while (cents % 25 >= 0)
{
count++;
cents = cents % 25;
}
除法将始终为>= 0
,因此您有无限循环,请切换到
while (cents % 25 > 0)
答案 1 :(得分:0)
由于逻辑错误,您陷入了无限循环。看一下while循环,例如:
while (cents % 25 >= 0)
{
count++;
cents = cents % 25;
}
modules操作将为您提供0到24之间的数字。无论原始值是多少美分,该条件始终为true。
您想要将条件更新为其他条件。请注意,在while期间,您应该以不同的方式更新cents,因为在第一次迭代之后,cents的值不会改变:假设它是10。它进入while循环,然后cents=cents%25
将保持10。仍然是无限循环< / p>
答案 2 :(得分:0)
问题出在这部分代码(以及类似的代码)
// using highest denomination first (quarters)
while (cents % 25 >= 0)
{
count++;
cents = cents % 25;
}
这将基于any_integer_value % 25
始终为>= 0
的原理导致无限循环。但是,问题实际上根本不需要进行mod操作。相反,请检查减去硬币的值是否为>= 0
,如果是,则进行减法。
// using highest denomination first (quarters)
while (cents - 25 >= 0)
{
count++;
cents = cents - 25;
}