while循环中的If语句未给出C中的预期输出

while循环中的If语句未给出C中的预期输出,c,algorithm,if-statement,while-loop,C,Algorithm,If Statement,While Loop,我正在制作一个程序来计算给定一个设定的零钱数额的最大零钱数额。我将所需的零钱作为一个正的浮点数,并将其乘以100,将其转换为整数,因此金额以便士为单位。在测试时,一些值起作用,但其他值(如4.2)则不起作用,当其应为18时给出答案22。我不明白为什么。请给我一些 int main (void) { float change; do { printf("How much change do you want?\n"); change = get_float();

我正在制作一个程序来计算给定一个设定的零钱数额的最大零钱数额。我将所需的零钱作为一个正的浮点数,并将其乘以100,将其转换为整数,因此金额以便士为单位。在测试时,一些值起作用,但其他值(如4.2)则不起作用,当其应为18时给出答案22。我不明白为什么。请给我一些

int main (void) 

{

float change;

do 
{

    printf("How much change do you want?\n");
    change = get_float();  

} while (change < 0);

int change1 = change * 100;

int coins = 0;

while (change1 != 0)

{

    if (change1 >= 25)

    {
        change1 -= 25;
        coins++;
    }

    else if (change1 >= 10)

    {
        change1 -= 10;
        coins++;
    }

   else if (change1 >= 5)

    {
        change1 -= 5;
        coins++;
    }

    else if (change1 >= 1)

    {
        change1 -= 1;
        coins++;
    }


}

//Print change
printf("%i\n", coins);

}
int main(无效)
{
浮动变化;
做
{
printf(“您想要多少零钱?\n”);
change=get_float();
}而(变化<0);
int change1=change*100;
整数=0;
while(change1!=0)
{
如果(更改1>=25)
{
变化1-=25;
硬币++;
}
否则如果(更改1>=10)
{
变化1-=10;
硬币++;
}
否则如果(更改1>=5)
{
变化1-=5;
硬币++;
}
否则如果(更改1>=1)
{
变化1-=1;
硬币++;
}
}
//打印更改
printf(“%i\n”,硬币);
}
舍入错误:

当机器存储4.2时,它不完全是4.2。因此,当乘以100时,它得到419.99999…,这将转换为int 419。解决这一问题的方法是:

int change1 = change * 100 + 0.5;
这也可以通过以下方式进行检查:

printf("%i\n", change1)

在计算之后。

嗯,我只想让您显示在这种情况下更喜欢使用三元运算符:

     #include <stdio.h>

     int     main() {   
    float number;   
    int   result;   
    int   ctn_coin;

       ctn_coin = 0;   
     printf("How much change do you want?\n");  
     scanf("%f", &number);   result = number * 100.1;

       while (result != 0)
         {
           result >= 25 ? result -= 25 :
             result >= 10 ? result -= 10 :
             result >= 5 ? result -= 5 :
             result >= 1 ? result -= 1 : 0;
           ctn_coin++;
        }   
   printf("%i\n", ctn_coin);   
   return (0); 
}
#包括
int main(){
浮点数;
int结果;
国际货币联盟硬币;
ctn_硬币=0;
printf(“您想要多少零钱?\n”);
scanf(“%f”,&number);结果=number*100.1;
while(结果!=0)
{
结果>=25?结果-=25:
结果>=10?结果-=10:
结果>=5?结果-=5:
结果>=1?结果-=1:0;
ctn_硬币++;
}   
printf(“%i\n”,货币);
返回(0);
}

您是否使用调试器对代码进行了单步调试?您需要对其进行调试才能找到问题所在。当程序运行时,逐行检查程序,看看数据哪里出错。请不要使用20世纪的浮点运算,甚至不要使用新型的21世纪双精度运算来解决“更改”问题。工作单位为整数分、便士、最小面额。常见问题解答。最好是经常使用整数,这真的很有帮助