Cs50 pset1-cash expect" 18 \ n&#34 ;, not" 22 \ n"

时间:2018-04-24 21:49:45

标签: c cs50

我是C的乞丐,而我是服用cs50。我在使用pset1 / cash时遇到了麻烦。我不知道我的代码有什么问题。该程序首先询问用户欠下了多少变化,然后吐出可以进行所述更改的最小硬币数量。它适用于大多数输入,但是当我检查它时,我得到预期" 18 \ n"而不是" 22 \ n" 请,我需要什么改变?

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

int main(void)
{
    float change;
    int cents, cents2, cents3, cents4;
    int total = 0;

    //Ask for user input and check
    do
    {
        change = get_float("How much change?\n");
    }
    while (change < 0);
    change = (change * 100) / 0.01;

    //Multiply the float numbers
    if (change < 1)
    {
        change *= 100;
    }
    else if (change < 10)
    {
        change *= 10;
    }

    //Change to int
    cents = change;

    //How many quarters
    while (cents >= 2500)
    {
        cents -= 2500;
        total++;
    }
    cents2 = cents;

    //How many dimes
    while (cents2 >= 1000)
    {
        cents2 -= 1000;
        total++;
    }
    cents3 = cents2;

    //How many nickels
    while (cents3 >= 500)
    {
        cents3 -= 500;
        total++;
    }
    cents4 = cents3;

    //How many pennies
    while (cents4 >= 100)
    {
        cents4 -= 100;
        total++;
    }

    printf("%i\n", total);
}

编辑:我终于找到了错误。在这一行:change =(change * 100)/ 0.01;我添加了0.01,现在它的工作原理。 更改=(更改* 10000)+ 0.01;

1 个答案:

答案 0 :(得分:0)

使用四舍五入功能将数字四舍五入。在代码的这一部分中,您需要添加round函数。

change = (change * 100) / 0.01;

必须是这样的:

cents = round(change * 100);

这会将数字四舍五入到最接近的整数如果您还有其他此类问题,则可以使用debug50之类的调试器,在其中通过单击行号的右侧然后在终端窗口中放置一个断点(执行clang的那个),您应该输入:

~/pset1/cash/ $ debug50 ./cash

或者您的程序被调用。这将打开调试器,并在其中找到所有变量及其相等值。按下播放按钮旁边的按钮,向前移动一行代码。

P.S 有很多与您完全一样的问题。只需在屏幕顶部的“搜索...”中搜索您的问题,我敢说您会找到问题的答案。