2017-03-27 16 views
0

私は、設定された変更量を考慮して、変更されたコインの最大量を計算するプログラムを作成しています。私は、正の浮動小数点として要求された変更を受け取り、それを100倍して整数に変換します。その結果、金額は1ペニーになります。テストでは、いくつかの値は動作しますが、4.2などの他の値は動作しません.18になる必要があるときに応答22を与えます。なぜ動作しないのですか。いくつか助けてくださいできますか?whileループ内の文がC言語で期待される出力を出さない場合

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

} 
+0

は、デバッガでコードをステップましたか? – pm100

+0

問題を見つけるには、デバッグする必要があります。実行中にプログラムを1行ずつ移動し、データがどこに間違っているかを確認します。 – Carcigenicate

+3

20世紀の「フロート」や21世紀の新しい「変わった」問題を「変化」の問題に使用しないでください。整数セント、ペニー、最小金種で働く。よくある質問。 –

答えて

0

丸め誤差:

すると、マシンの店4.2、それは正確 4.2ではありません。

int change1 = change * 100 + 0.5; 

これも

printf("%i\n", change1) 

によって確認することができます:100を掛けたときにこのように、それはこの問題を解決する方法は次のようになりint型419に変換する、... 419.99999になります計算後。

+2

整数を使用する方が良いでしょう –

0

ハムは、私はちょうどあなたがこのような状況で使用三項演算子を好むように示したい:

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

ありがとう、これは本当に役に立ちます – Joshua

関連する問題