CS50 PSET1 cash.c:我似乎无法打印出我想要的价值。只是不断重复输入&再次

时间:2018-06-14 08:11:21

标签: c cs50 greedy

初学者在这里,我觉得我已经如此接近解决这个问题了但是出于某种原因,每当我运行我的代码时,它一直在问我一遍又一遍地输入我欠了多少改变而且没有做出任何改变。 t打印硬币数量

问题:

  

在〜/ workspace / pset1 / cash /中的一个名为cash.c的文件中写一个程序   首先要求用户欠下多少变化,然后吐出   可以进行所述更改的最小硬币数量

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

int main(void)
{
    float x;
    int coin_amount = 0;
    do
    {
        x = get_float("how much change is owed: $");
    }
    while (x < 0);

    while (x >= .25)
    {
        coin_amount += 1;
        x = x - .25;
    }
    while (x >= .10 && x < .25)
    {
        coin_amount += 1;
        x = x - .10;
    }
    while (x >= .05 && x < .10)
    {
        coin_amount += 1;
        x =  x - .05;
    }
    while (x >= .01 && x < .05)
    {
        coin_amount += 1;
        x = x - .01;
    }
    while (x < .01)
    {
        coin_amount = coin_amount;
    }
    printf("I have %i coins to give you in change\n", coin_amount);
}

我在做错的任何想法?谢谢:))

1 个答案:

答案 0 :(得分:0)

您的解决方案的主要问题是最终while()循环 - 一旦输入 - 无法退出。还有一些其他小问题:

  • 您应该使用return 0;int main(void)
  • 提供返回值
  • while (x >= .10 && x < .25)和朋友是多余的:你可以使用while (x >= .10)(因为第二个条件 已经在之前的while()循环
  • 中得到满足
  • 您可以使用x -= .25代替x = x - .25(不重要且优先考虑)

考虑到这些要点,您可以尝试以下方法......

#include <stdio.h>

int main(void) {
    float x = 0.0;
    int coin_amount = 0;

    printf("Enter the currency amount: ");
    scanf("%f", &x);
    printf("You entered: %.4f\n", x);

    while (x >= .25) {
        coin_amount += 1;
        x -= .25;
    }
    while (x >= .10) {
        coin_amount += 1;
        x -= .10;
    }
    while (x >= .05) {
        coin_amount += 1;
        x -= .05;
    }
    // Use .00999 instead of .01 due to quirks with floating point math
    while (x >= .00999) {
        coin_amount += 1;
        x -= .01;
    }
    if (x > 0) {
        printf("Ignoring residual value - %.4f ...\n", x);
    }
    printf("I have %i coins to give you in change\n", coin_amount);

    return 0;
}

您尚未指定get_float()功能的内容,因此我使用了scanf()

正如Yunnosch在他的评论回复中提出的那样,考虑一个不使用浮点数学的解决方案也许值得。