C计算结果看不懂

C calculation result incomprehensible

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

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

顺便说一下,如果我只输入 dime <= 20,我会得到 2 hmm。我不明白为什么余数也等于 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);
}

您在 for 循环的每个 运行 期间从 remainder 减去 dime,而 dime 在循环的每次迭代期间增加环形。假设在第二个 for 循环之前 change 最初是 20。第一个循环执行会减去 10,留下 remainder 为 10。然后 dime 增加 10,现在是 20。循环条件失败,因为 20 > 10,并且循环 运行s只有一次。

我的建议是给你的变量起更直观的名字,比如 ix 用于基本循环计数器,dimes_needed 而不是 coins1