程序将计算大多数提供的值,除了一些

Program will calculate most provided values except for some

这是一个简单的 C 语言货币兑换计算器,适用于我正在学习的课程 (CS50)。

它工作得很好,直到你提交值 0.154.24.3(这些是我到目前为止捕获的值),程序冻结,不会输出任何结果。我必须CTRL + C强制退出。

如果我尝试另一个号码,说 0.41 我会得到正确答案。

为什么会这样?

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

int main (void) {

    printf("How much change do you owe: ");

    float amount;

    // (;;) represents an infinite loop
    for (;;)
    {
        amount = GetFloat();

        // if user's input is negative, the script will break and prompt the user to enter a positive value.
        if (amount >= 0) { 
            break;
        }

        printf("Please provide a positive value: ");
    }

    float cents = 100.0 * amount;
    float quarter = 0;
    float dime = 0;
    float nickel = 0;
    float penny = 0;


    // I used the shortcut to represent (cents = cents + 25.0)
    while (cents > 0) {
        if (cents >= 25.0) {
            cents -= 25.0;
            quarter += 1;
        } else if (cents >= 10.0) {
            cents -= 10.0;
            dime += 1;
        } else if (cents >= 5.0) {
            cents -= 5.0;
            nickel += 1;
        } else if (cents >= 1.0) {
            cents -= 1.0;
            penny += 1;
        }
    }

    float coins = quarter + dime + nickel + penny;

    printf("%f\n", coins);
}

您可能应该将具有离散值的项目表示为整数而不是浮点数。如果 cents 是非整数(例如 10.1),则该循环将永远不会结束。

我试过了,由于浮点错误,我输入了 0.15 美分到 15.0000010。

什么是#include <cs50.h>?还有

你的逻辑不通。这是c编程课程吗? 这些是您的金额值

float cents = 100.0 * amount;
float quarter = 0;
float dime = 0;
float nickel = 0;
float penny = 0;

然后你给它们一个零值,当这些值加起来等于 0 时。这就是为什么大声笑,你告诉机器打印 0 并这样做了。这些是你的条件,为什么你需要一个循环来修复你的条件。您可以使用大小写开关来简化此操作或仅修复您的条件。

        while (cents > 0) {
    if (cents >= 25.0) {
        cents -= 25.0;
        quarter += 1;
    } else if (cents >= 10.0) {
        cents -= 10.0;
        dime += 1;
    } else if (cents >= 5.0) {
        cents -= 5.0;
        nickel += 1;
    } else if (cents >= 1.0) {
        cents -= 1.0;
        penny += 1;
    }
}

在顶部给 amount 一个值,因为值可以是任何数字,将值设置为 =0 并在 scanf 之后放入 printf 以显示用户再次输入的值。