当它应该在 0 处停止时,我从 do-while 循环中得到负输出

I'm getting negative output from a do-while loop, when it's supposed to stop at 0

我正在为 CS50x 的问题集 1 构建一个名为“现金”的程序,该程序是用 C 编写的。我不知道如何使函数 cant_de_monedas 在我的主要函数上运行,并且当我尝试在每个循环后打印 return "dinero" 时,即使达到 0,它也会继续倒计时。

//inclusión de librerías
#include <stdio.h>
#include <cs50.h>


//llamado de la función cant_de_monedas para su funcionamiento en main
float cant_de_monedas(float dinero, int monedas);

int main(void)
{
//input del dinero principal
    float dinero = get_float("Insertar dinero: ");
//ajuste de monedas a 0
    int monedas= 0;
//llama a la función cant_de_monedas
    float cambio = cant_de_monedas(dinero, monedas);
    
    printf("Cantidad de monedas de vuelto: %i\n", monedas);
}


//analiza las monedas necesarias de cambio para una cantidad de dinero variable en centavos de dolar
float cant_de_monedas(float dinero, int monedas)
{
//suma una moneda mientras el dinero sea mayor o igual a 25
    do
    {
        monedas++;
        dinero=dinero-25;
        printf("%f\n", dinero);
    }
    while (dinero>=25);
//suma una moneda mientras el dinero se encuentre entre 25 y 10 incluído
    do
    {
        monedas++;
        dinero=dinero-10;
        printf("%f\n", dinero);
    }
    while (dinero<25 && dinero>=10);
//suma una moneda mientras el dinero se encuentre entre 10 y 5 incluído
    do
    {
        monedas++;
        dinero=dinero-5;
        printf("%f\n", dinero);
    }
    while (dinero<10 && dinero>=5);
//suma una moneda mientras el dinero se encuentre entre 5 y 1
    do
    {
        monedas++;
        dinero=dinero-1;
        printf("%f\n", dinero);
    }
    while (dinero<5 && dinero>1);
//suma una moneda mientras el dinero sea 1
    do
    {
        monedas++;
        dinero=dinero-1;
        printf("%f\n", dinero);
    }
    while (dinero==1);
    return monedas;
}

我从中得到的输出是:

$ ./cash
Insertar dinero: 51

26.000000
1.000000
-9.000000
-14.000000
-15.000000
-16.000000

Cantidad de monedas de vuelto: 0

我说三点:

  1. 您似乎在处理浮点数,但可能存在一些舍入问题。我建议您只使用整数值。
  2. 如果您确实需要使用浮点数,我建议您使用 double 而不是 float
  3. 而不是 do-while,只需使用 while(假设条件永远不会满足,那么循环根本不会执行)。