Я получаю отрицательный результат от do-while l oop, когда он должен остановиться на 0 - PullRequest
1 голос
/ 05 августа 2020

Я создаю программу для набора задач 1 CS50x под названием «ca sh», которая написана на C. Я не знаю, как заставить функцию cant_de_monedas работать с моей основной функцией, и когда я попытался распечатать результат возврата «dinero» после каждого l oop, он продолжает отсчет даже после того, как достигнет нуля.

//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 Ответ

3 голосов
/ 05 августа 2020

У меня есть три замечания:

  1. Кажется, вы работаете с числами с плавающей запятой, хотя с ними могут быть некоторые проблемы с округлением. Я бы посоветовал вам работать только с целыми числами.
  2. Если вам действительно нужно работать с плавающими числами, советую использовать double вместо float.
  3. Вместо a do-while, просто используйте while (представьте, что условие никогда не выполняется, тогда l oop не выполняется вообще).
...