检查 CS50 Harvard Cash App 中的 50 个错误

Check 50 Error in Cash App for CS50 Harvard

对编码非常陌生,因此感谢您的帮助,一段时间以来一直被这些检查错误所困。

//source codde
#include <stdio.h>
#include <cs50.h>
#include <unistd.h>

int main(void)
{
    float user;
    int change, coins, decimals;

    do
    {
       printf("Enter change amount\n");
       user = get_float("");
    } while (user <= 0);

    change = user * 100;
    coins = 0; 

    while (change >= 25)
    {
        change = change - 25;
        coins++;
    }

    while (change >= 10)
    {
       change = change - 10;
       coins++;
    }

    while (change >= 5)
    {
       change = change - 5;
       coins++;
    }

    while (change >= 1)
    {
        change = change - 1;
        coins++;
    }

    printf("You have entered\f%.1f\n", user);
    sleep(1);
    printf("The least amount of coins possible\f%.2d\n", coins);
}

我不断收到的错误消息: :( 输入 0.01 产生输出 1 预期“1\n”,而不是 "You have enter..." 这实际上 returns 返回 01 所以不确定 :( 1.6 的输入产生 7 的输出 预期“7\n”,而不是 "You have enter..." 同样的事情只是 07 有没有办法删除零?

:( 4.2 的输入产生 18 的输出 应为“18\n”,而不是 "You have enter..." 您是否忘记将您的输入四舍五入到最接近的美分?

这个我不确定它会产生 22

的输出

对于输入 4.20,您看到 22 而不是 18 的原因是浮点数不精确。浮点数不能准确表示值 4.20,因此它会在您的变量中存储一个比 4.20 稍大或稍小的值。

如果使用的值稍小(例如 4.1999999 或 4.19998567),则将其乘以 100 会得到接近 419.99999 的值。将其转换为 int 会将其截断为 419 并为您提供 22 个硬币的结果。

解决方案是在将浮点数转换为整数时舍入到最接近的整数,而不是截断。适用于小浮点数的一个常见技巧是在截断之前添加 0.5:

 change = user * 100 + 0.5;

419.5000 到 420.4999 范围内的值将变成 420.0000 到 420.99999 范围内的值。然后截断将产生 420.

您自然也可以使用 c 附带的内置舍入函数。

您还应该考虑使用 double 而不是 float。使用 float 节省的 space 在现代桌面系统上通常不值得。

问题集很清楚程序应该提供什么样的输出。你不匹配那个。再读一遍。

并且不要忘记根据问题集对您的输入进行四舍五入。