首页 > 解决方案 > 此解决方案不接受任何浮点数

问题描述

目前在其中一个 cs50x 问题集“现金”上,这是一个简单的“询问欠多少零钱,然后计算需要多少硬币”任务,所以不是在这里寻求解决方案,但我不明白为什么这行不通。

虽然它确实要求输入,但当我输入诸如 5.96 之类的浮点数时,它只是挂起。没有回报,没有任何错误。我必须强行关闭它。另一件事是 while 循环在设置为 0 时做同样的事情,这是为了获得确切数量的硬币而预期的做事方式。

我知道这段代码的效率有多低,并且有更简单的做事方式。我只是想了解原因,以避免继续犯同样的错误。谢谢。

#include <stdio.h>
#include <cs50.h>
#include <math.h>


int main(void)
{
    // changes and other containers
    int p = 1;
    int n = 5;
    int d = 10;
    int q = 25;
    int x = 0;
    float c;
    // get how much change is owed in float
    do
    {
        c = get_float("Change owed: ");
    }
    while (c < 0);
    // int conversion to avoid imprecision
    int a = round(c * 100);
    // 1 because 0 spits out an unknown error
    while (a >= 1)
    {
        // if the converted amount is bigger than a quarter
        if (a >= q)
        {
            // x = number of coins, a = amount left
            x = a / q;
            a = a % q;
        }

        else if (a >= d)
        {
            x = x + a / d;
            a = a - a % d;
        }

        else if (a >= n)
        {
            x = x + a / n;
            a = a - a % n;
        }

        else
        {
            x = x + a / p;
            a = a - a % p;
        }
    }
    printf("%i\n", x);
    printf("%i\n", a);
}

标签: ccs50

解决方案


感谢 WhozCraig,我发现我的逻辑有问题。

#include <stdio.h>
#include <cs50.h>
#include <math.h>


int main(void)
{
    // changes and other containers
    int p = 1;
    int n = 5;
    int d = 10;
    int q = 25;
    int x = 0;
    float c;
    // get how much change is owed in float
    do
    {
        c = get_float("Change owed: ");
    }
    while (c < 0);
    // int conversion to avoid imprecision
    int a = round(c * 100);
    // 1 because 0 spits out an unknown error
    while (a >= 1)
    {
        // if the converted amount is bigger than a quarter
        if (a >= q)
        {
            // x = number of coins, a = amount left
            x = a / q;
            a = a % q;
        }

        else if (a >= d)
        {
            x = x + a / d;
            a = a % d;
        }

        else if (a >= n)
        {
            x = x + a / n;
            a = a % n;
        }

        else
        {
            x = x + a / p;
            a = a % p;
        }
    }
    printf("%i\n", x);
    printf("%i\n", a);
}


推荐阅读