为什么我的程序适用于某些测试而不适用于其他测试?

这是我测试的输出:

:) greedy exists :) greedy compiles :( input of 0.41 yields output of 4 expected "4\n", not "3\n" :( input of 0.01 yields output of 1 expected "1\n", not "0\n" :) input of 0.15 yields output of 2 :) input of 1.6 yields output of 7 :) input of 23 yields output of 92 :) input of 4.2 yields output of 18 :) rejects a negative input like -.1 :) rejects a non-numeric input of "foo" :) rejects a non-numeric input of "" 

这是代码:

 #include  #include  void count_coins(); int coin = 0; float change = 0; int main(void) { do { change = get_float("How much change is owed? "); } while (change  0.24) { coin++; change -= 0.25; // printf("%.2f\n", change); } while (change > 0.09) { coin++; change -= 0.10; // printf("%.2f\n", change); } while(change > 0.04) { coin++; change -= 0.05; // printf("%.2f\n", change); } while (change >= 0.01) { coin++; change -= 0.01; // printf("%.2f\n", change); } } 

正如Havenard已经写过的那样,问题是change存储为float 。 对于这样的程序,必须将change存储为整数值。

这是你的代码用int而不是float

 #include  #include  void count_coins (void); int coin = 0; int change = 0; int main (void) { do { change = 41; // insert a get integer function here } while (change < 0); count_coins(); printf("%i\n", coin); } void count_coins (void) { while (change >= 25) { coin++; change -= 25; } while (change >= 10) { coin++; change -= 10; } while(change >= 5) { coin++; change -= 5; } while (change >= 1) { coin++; change -= 1; } }