C计算结果难以理解

时间:2016-07-19 10:09:03

标签: c cs50

为什么在将2.2的输入作为浮点数时,我无法得到2的结果。

使用我的代码,2.2应该转换为220,当它通过第一个for循环时,我应该得到20的余数(这很好,因为它给了我8个硬币)。
但当它经历第二个循环时,我无法得到20/10 = 2,我总是得到1

顺便说一句,如果我只是把一角硬币<= 20,我会得到2小时。我不明白为什么,因为余数也等于20。

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

int main(void)
{
    float change ;
    float quarter ;
    float dime  ;
    float nickel ;
    float penny = 1;
    int coins = 0;
    int coins1 = 0;
    int coins2 = 0;
    int coins3 = 0;
    int sum = 0;
    int remainder ;

    do
    {
        printf("What is the owed change: \n");
        change = GetFloat();
        change = round(change * 100);
        printf("%f\n", change);
    }

    while(change < 0);

    for(quarter = 25; quarter <= change; quarter+=25)
    {
        remainder = change - quarter;
        coins++;
    }

    printf("%d,%d\n", remainder,coins);

    for (dime = 10; dime <= remainder; dime += 10)  //This is where the problem starts.
    {
        remainder = remainder - dime;
        coins1++;
    }

    printf("%d,%d\n", remainder,coins1);

    for (nickel = 5; nickel < remainder; nickel += 5)
    {
        remainder = remainder - nickel;
        coins2++;
    }

    printf("%d,%d\n", remainder,coins2);

    for (penny = 1; penny < remainder; penny += 1)
    {
        remainder = remainder - penny;
        coins3++;
    }

    printf("%d,%d\n", remainder,coins3);
    printf("\n%d\n", sum = coins + coins1 + coins2 + coins3);
}

1 个答案:

答案 0 :(得分:3)

您在dime循环的每次运行期间从remainder减去for,而在循环的每次迭代期间dime正在增加for。让我们假设在第二个remainder循环之前最初的变化是20。第一个循环执行将减去10,将dime保留为10.然后i增加10并且现在是20.循环条件失败,因为20> 10,循环只运行一次。

我的建议是为变量提供更直观的名称,例如xdimes_needed用于基本循环计数器,而coins1代替{{1}}