CS50 PSET1现金。c:我可以;我似乎无法打印出我想要的值。只是不断重复输入&;再三

CS50 PSET1现金。c:我可以;我似乎无法打印出我想要的值。只是不断重复输入&;再三,c,cs50,greedy,C,Cs50,Greedy,这里是初学者,我觉得我离解决这个问题很近了,但出于某种原因,每当我运行代码时,它总是一遍又一遍地要求我输入欠我多少零钱,而不打印硬币的数量 问题是: 在~/workspace/pset1/cash/的cash.c文件中编写一个程序 它首先询问用户需要多少零钱,然后吐出来 可以兑换的最小硬币数量 #包括 #包括 #包括 内部主(空) { 浮动x; int coin_amount=0; 做 { x=获得浮动(“欠多少钱:$”; } 而(x=.25) { 硬币数量+=1; x=x-.25; } 而(x

这里是初学者,我觉得我离解决这个问题很近了,但出于某种原因,每当我运行代码时,它总是一遍又一遍地要求我输入欠我多少零钱,而不打印硬币的数量

问题是:

在~/workspace/pset1/cash/的cash.c文件中编写一个程序 它首先询问用户需要多少零钱,然后吐出来 可以兑换的最小硬币数量

#包括
#包括
#包括
内部主(空)
{
浮动x;
int coin_amount=0;
做
{
x=获得浮动(“欠多少钱:$”;
}
而(x<0);
而(x>=.25)
{
硬币数量+=1;
x=x-.25;
}
而(x>=.10&&x<.25)
{
硬币数量+=1;
x=x-.10;
}
而(x>=.05&&x<.10)
{
硬币数量+=1;
x=x-.05;
}
而(x>=.01&&x<.05)
{
硬币数量+=1;
x=x-.01;
}
而(x<0.01)
{
硬币数量=硬币数量;
}
printf(“我有%I个硬币要给你找零”,硬币金额);
}

你知道我做错了什么吗?谢谢:)

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

  • 您应该使用
    返回0
    int提供返回值
    主(无效)
  • 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;
}
#包括
内部主(空){
浮动x=0.0;
int coin_amount=0;
printf(“输入货币金额:”);
scanf(“%f”、&x);
printf(“您输入的:%.4f\n”,x);
而(x>=.25){
硬币数量+=1;
x-=.25;
}
而(x>=.10){
硬币数量+=1;
x-=.10;
}
而(x>=.05){
硬币数量+=1;
x-=.05;
}
//使用.00999而不是.01,这是由于浮点数学的特殊性
而(x>=.00999){
硬币数量+=1;
x-=.01;
}
如果(x>0){
printf(“忽略残值-%.4f…\n”,x);
}
printf(“我有%I个硬币要给你找零”,硬币金额);
返回0;
}
您没有指定您的
get\u float()
函数是什么,因此我使用了
scanf()


正如Yunnosch在其评论回复中提出的,可能值得考虑一种不使用浮点数学的解决方案。

我们可以看到
get_float
函数吗?另外,我可能会将
while(x<0);
更改为
while(x<0.0)
所以你在比较浮点和浮点。我看不到任何方法可以终止你的最终
while(x
循环。你可以试着问cs50相关的问题。不要对货币等可数事物使用浮点数学。可能重复
#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;
}