【问题标题】:Confused with why code not running correctly对为什么代码不能正确运行感到困惑
【发布时间】: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 &gt; 0) 没有意义。如果条件为真,您将获得无限循环进行舍入。如果它是错误的,则根本没有四舍五入。并且舍入结果未使用,因此丢失。
  • 有人在这里回答了这个问题:stackoverflow.com/questions/1343890/…
  • 为什么要将它舍入为 int? Casting.478 to int 给你 0,因为 0 和 1 之间没有整数值。
  • 提供最小的可重现示例。如果轮次未按预期工作,请删除与轮次无关的任何内容。提供您收到的内容以及您的期望。
  • 我看到您的代码包含与圆形无关的错误。找到他们是你的工作。调试你的代码。

标签: c floating-point rounding infinite-loop


【解决方案1】:

据我了解,部分

while (change != 0)
    change = change * 100;

如果在change 非零时启动,则为无限循环。根据平台的不同,乘法最终会达到NaN 或正无穷大,从而导致循环永远继续。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-12
    • 2012-10-05
    • 1970-01-01
    相关资源
    最近更新 更多