【发布时间】:2016-06-22 12:02:59
【问题描述】:
**我做了一些更改,我想知道您是否可以帮助我找出它没有运行的原因。当我运行它时,会打印文本,但输入永远不会停止运行。 ** 该程序旨在复制(?)贪心算法。它首先询问用户欠了多少零钱,然后提供可以进行该零钱的最小硬币数量。
非常感谢您对我的代码提供的任何帮助。
#include <stdio.h>
#include <math.h>
int main(void)
{
//declared variables
float change;
int num = 0;
// prompts for amount owed
printf("Please provide the amount owed: ");
change = GetFloat();
while (change != 0)
change = change * 100;
int owed = round(change);
{
// if statements for calculating number of coins required
if (owed >= 25)
{
owed = owed - 25;
num ++;
}
if (owed >= 10 && owed < 25)
{
owed = owed - 10;
num ++;
}
if (owed >= 5 && owed < 10)
{
owed = owed - 5;
num ++;
}
if (owed >= 1 && owed < 5)
{
owed = owed - 1;
num ++;
}
}
printf("%d\n", num);
}
当我更改 while 语句并注释掉“change = change * 100;”时 它开始工作。但是,这样做不会执行轮函数。
change = GetFloat() * 100;
while (change != 0)
// change = change * 1000;
// int owed = round(change);
【问题讨论】:
-
while (change > 0)没有意义。如果条件为真,您将获得无限循环进行舍入。如果它是错误的,则根本没有四舍五入。并且舍入结果未使用,因此丢失。 -
有人在这里回答了这个问题:stackoverflow.com/questions/1343890/…
-
为什么要将它舍入为 int? Casting.478 to int 给你 0,因为 0 和 1 之间没有整数值。
-
提供最小的可重现示例。如果轮次未按预期工作,请删除与轮次无关的任何内容。提供您收到的内容以及您的期望。
-
我看到您的代码包含与圆形无关的错误。找到他们是你的工作。调试你的代码。
标签: c floating-point rounding infinite-loop