Ronald Prithiv - 1 year ago 287
C Question

# CS50 PSet 1 Greedy

I am writing a program that takes an input and should print out the least number of coins used. When I run the program and type in an input, it doesn't work as expected and doesn't print anything. What am I doing wrong here?

``````#include <stdio.h>
#include <cs50.h>

int main (void)
{
float f = 0;
int count = 0;//number of coins
do
{
printf("How much change is owed?\n");
f = GetFloat();
}
while (f < 0);

//Convert to cents
f = f * 100;
while (f > 0)
{
if (f > 25)
{
f = f - 25;
count++;
}
else if (f > 10)
{
f = f - 10;
count++;
}
else if (f > 5)
{
f = f - 5;
count++;
}
else if (f > 1)
{
f = f - 1;
count++;
}
}
printf("%d", count);
}
``````

It doesn't print anything

The problem is that the program is stuck in an infinite loop. Initially, `f=0.41`. Then, you do `f = f * 100`; and we have `f = 41`.

Then, as you move through the loop,

First, `f>25`, so `f = f - 25`, and you get `f = 16`.

Then, next iteration, `f>10`, so `f = f - 10`, and you get `f = 6`.

Then, `f>5`, so `f = f - 5`, and you get `f = 1`.

Now, none of the if conditions in the loop are satisfied, but the condition in the while remains true. So, it never breaks out. To correct this, replace all `>` symbols in the if blocks with `>=`. This will give you the correct number of coins. (but you must ensure that `f` does not have any fractional part after `f = f * 100`).

`````` f = (int)(f * 100);
while (f > 0)
{
if (f >= 25)
{
f = f - 25;
count++;
}
else if (f >= 10)
{
f = f - 10;
count++;
}
else if (f >= 5)
{
f = f - 5;
count++;
}
else if (f >= 1)
{
f = f - 1;
count++;
}
}
``````
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download