【问题标题】:If statements within while loop not giving expected output in Cif 循环中的语句在 C 中没有给出预期的输出
【发布时间】:2017-03-28 04:13:43
【问题描述】:

我正在编写程序来计算给定零钱的最大零钱数量。我将所需的更改作为正浮点数,并将其乘以 100 将其转换为 int,因此金额以便士为单位。经测试,某些值有效,但其他值(例如 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);

}

【问题讨论】:

  • 您是否使用调试器单步执行了代码?
  • 你需要调试它才能找到问题。在程序运行时逐行查看程序,看看数据哪里出错了。
  • 请不要使用 20 世纪的 float 甚至新奇的 21 世纪的 double 来解决“变化”问题。以整数美分、便士、最小面额工作。常见问题解答。

标签: c algorithm if-statement while-loop


【解决方案1】:

舍入误差:

当机器存储 4.2 时,它不是 确切地 4.2。因此,当乘以 100 时,它得到 419.99999...,它转换为 int 419。解决此问题的方法是:

int change1 = change * 100 + 0.5;

这也可以检查

printf("%i\n", change1)

计算后。

【讨论】:

  • 一直使用整数会更好
【解决方案2】:

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

     #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); 
}

【讨论】:

  • 非常感谢,这真的很有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-28
相关资源
最近更新 更多