Question

I have run this program and get the error expression result unused. I may be doing something simple wrong, but I have spent the day trying to figure it out to no avail. Any help you can provide is greatly appreciated.

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

int main()
{
    int x, y = 0;
    printf("Enter the amount of change ");
    x = GetFloat() * 100;
    while (x != 0)
    {
        if (x >= 25)
        {
            x - 25;
            y = y + 1;
        }
        if (x >= 10 && x < 25)
        {
            x - 10;
        }   y = y + 1;
        if (x >= 5 && x < 10)
        {
            x - 5;
        }   y = y + 1;
        if (x >= 1 && x < 5)
        {   x - 1;
            y= y + 1;
        }
    }
    printf("The number of coins neccessary is %d", y);
}
Was it helpful?

Solution

    if (x >= 25)
    {
        x - 25;               // This accomplishes nothing
        y = y + 1;
    }
    if (x >= 10 && x < 25)
    {
        x - 10;               // This accomplishes nothing
    }   y = y + 1;
    if (x >= 5 && x < 10)
    {
        x - 5;                // This accomplishes  nothing
    }   y = y + 1;
    if (x >= 1 && x < 5)
    {
        x - 1;                // This accomplishes nothing
        y= y + 1;
    }

In each of those lines you're subtracting a number from x, but you're doing nothing with the result. If you're trying to update x with the result, you need to do just like you're doing with y, and put x = in front of the expression.

So if you want x to go down by 25, you should write:

x = x - 25; 

Alternatively, you can write the shorthand:

x -= 25;     // Note the equal sign 

OTHER TIPS

All the 4 statements x - 25, x- 10, x- 5, x - 1 will turn out to be useless unless you assign that value to x; Because you are trying to subtract the value from x, but you are not assigning the new value to x.

Here is the solution of your problem:

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

int main()
{
    int x, y = 0;
    printf("Enter the amount of change ");
    x = GetFloat() * 100;
    while (x != 0)
    {
        if (x >= 25)
        {
            x = x - 25;   //or x-=25;
            y = y + 1;
        }


        if (x >= 10 && x < 25)
        {
            x = x - 10;   //or x-=10;
            y = y + 1;
        }
        if (x >= 5 && x < 10)
        {
            x = x - 5;    //or x-=5;
            y = y + 1;
        }
        if (x >= 1 && x < 5)
        {
            x = x - 1;     //or x-=1; or x--; or --x; :)
            y = y + 1;
        }
   }
   printf("The number of coins neccessary is %d", y);
}

I would remain to be convinced about your loop structure. There's the division operator that can be used to good effect:

int total = 0;
int ncoins;
int amount = GetFloat() * 100;

assert(amount >= 0);

ncoins = amount / 25;
total += ncoins;
amount -= ncoins * 25;

assert(amount < 25);
ncoins = amount / 10;
total += ncoins;
amount -= ncoins * 10;

assert(amount < 10);
ncoins = amount / 5;
total += ncoins;
amount -= ncoins * 5;

assert(amount < 5);
total += amount;

That's written out longhand; you could devise a loop, too:

int values[] = { 25, 10, 5, 1 };
enum { N_VALUES = sizeof(values) / sizeof(values[0]) };

int total = 0;
int ncoins;
int amount = GetFloat() * 100;

assert(amount >= 0);

for (int i = 0; i < N_VALUES && amount > 0; i++)
{
    ncoins = amount / values[i];
    total += ncoins;
    amount -= ncoins * values[i];
}

assert(amount == 0);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top