将更改分发给客户的程序.(C)



目标:

实施一个程序,该程序计算给用户更改所需的最小硬币数量。

问题:

程序无法正确执行。我相当确定我的问题本质上是合乎逻辑的,但也可能是由于经验不足而导致的。

额外信息:

我在代码中添加了打印功能,以确定问题在哪里。" test1"是广播," test2"不是。

我正在使用cs50.h库本地的某些函数:

  • get_float(); - 从用户获取浮动值并存储它。

请不要为我修复我的代码!我需要学习自己做。我只需要帮助找到我的逻辑错误或格式化错误即可。是的,我知道这不是有效的。

我要寻找的示例:

  • "您的问题在X行中,您的值使它成为了,因此变量永远不会达到0。"

  • "在C中,您不能格式化'(x< 0);' - 您必须说'(x< 0);'。"

代码演练:

程序从用户,"金额"one_answers"成本"中获得2个浮点值。"金额"是客户给了多少钱,"成本"是商品的成本。

程序找到"金额 - 成本",以确定欠多少变化。此值存储在" diff"中。

程序从'diff'中减去0.25,并将1添加到可变的"季度"。

程序从'diff'中减去0.10,并将1添加到变量"毛钱"。

...

程序打印需要使用多少季度,一角钱,镍,便士,以最有效的方式进行客户更改。

假设只能使用硬币。

代码:

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

int main()
{
    float cost;
    do
    {
        printf("How much did it cost?n");
        cost = get_float();
    }
    while (cost < 0);
    float amount;
    do
    {
        printf("How much did you pay?n");
        amount = get_float();
    }
    while (amount < cost);


    int quarter = 0;
    int dime = 0;
    int nickel = 0;
    int penny = 0;
    float diff = amount - cost;
    do
    {
        while (diff >= 0.25)
        {
            diff = diff - .25;
            quarter++;
        }
        printf("test1");

        while (.10 <= diff < .25)
        {
            diff = diff - 0.10;
            dime++;
        }
        printf("test2");

        while (0.05 <= diff < .10)
        {
            diff = diff - 0.05;
            nickel++;
        }

        while (0.01 < diff < 0.05)
        {
            diff = diff - 0.01;
            penny++;
        }

        while (diff == 0.01)
        {
            penny++;
            diff = 0;
        }

    } // end bracket for do function
    while (diff > 0);

    if (diff == 0)
        {
            printf("Your change consists of:n");
            printf("%i quarters.n", quarter);
            printf("%i dimes.n", dime);
            printf("%i nickels.n", nickel);
            printf("%i pennies.n", penny);
            exit(0);
        }
    if (diff < 0)
        {
            printf("Your change consists of:n");
            printf("%i quarters.n", quarter);
            printf("%i dimes.n", dime);
            printf("%i nickels.n", nickel);
            printf("%i pennies.n", penny);
            exit(0);
        }
} // end bracket for int main

预期结果:

程序如前所述。

实际结果:

程序无法完全执行。" test1"是广播,'test2'不是。

首先,您需要检查浮点算术的准确性。

也就是说,

之类的陈述
 while (.10 <= diff < .25)

不做您认为他们做的事情。使用您在c。

您需要使用&&操作员将它们搭配,例如

 while (.10 <= diff && diff < .25) {

麻烦与诸如 0.05 <= diff < .10之类的比较,与 0.05 <= diff && diff < .10不同,后者的目的是您打算做的,前者比较0或1至.10。如果diff大于0.05,则'0.05&lt; = diff'评估为1,然后将其与.10进行比较。您所写的内容与(0.05 <= diff) < .10相同。

首先,您的循环是永恒的。 而(金额&lt;成本);&lt; - 金额和成本永远不会改变。所以...

第二,您无法写出(1&lt; = 2&lt; 3)之类的条件,这并不意味着您认为它的含义。它单独执行操作员,因此您最终会得到类似于(1&lt; = 2)&lt;3,第一个是1(true)或0(false)。

相关内容

  • 没有找到相关文章

最新更新