Reputation: 109
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);
}
Upvotes: 0
Views: 239
Reputation: 181
your program will never end after value of f becomes 1. Replace '>' signs with '>=' signs
Upvotes: 0
Reputation: 8527
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++;
}
}
Upvotes: 2