0

我已经运行了这个程序并得到了未使用的错误表达式结果。我可能做错了一些简单的事情,但我花了一天的时间试图弄清楚它无济于事。非常感谢您提供的任何帮助。

#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);
}
4

3 回答 3

3
    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;
    }

在每一行中,您从 中减去一个数字x,但您对结果没有做任何事情。如果您尝试x使用结果进行更新,则需要像使用 一样进行操作y,并将其放在x =表达式的前面。

所以如果你想x通过25,你应该写:

x = x - 25; 

或者,您可以编写速记:

x -= 25;     // Note the equal sign 
于 2014-03-16T05:03:16.157 回答
0

所有 4 个语句 x - 25, x- 10, x- 5, x - 1 将证明是无用的,除非您将该值分配给 x;因为您试图从 x 中减去该值,但您没有将新值分配给 x。

这是您的问题的解决方案:

#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);
}
于 2014-03-16T05:13:09.027 回答
0

我仍然相信你的循环结构。有一个可以用来产生良好效果的除法运算符:

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;

那是手写的;你也可以设计一个循环:

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);
于 2014-03-16T06:41:21.307 回答