当它应该在 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
我说三点:
- 您似乎在处理浮点数,但可能存在一些舍入问题。我建议您只使用整数值。
- 如果您确实需要使用浮点数,我建议您使用
double
而不是 float
。
- 而不是
do-while
,只需使用 while
(假设条件永远不会满足,那么循环根本不会执行)。
我正在为 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
我说三点:
- 您似乎在处理浮点数,但可能存在一些舍入问题。我建议您只使用整数值。
- 如果您确实需要使用浮点数,我建议您使用
double
而不是float
。 - 而不是
do-while
,只需使用while
(假设条件永远不会满足,那么循环根本不会执行)。