2016-04-13 9 views
0

私はCプログラミングクラス用のカロリープログラムを作成していますが、コンパイルすると正しい出力が得られません。例えば、私はカロリーの数を入力して385で、私が最初に入力したカロリーを超えるチップの総数を取得します。私は以下のコードを含んでいます。プログラムはコンパイルしますが、正しい値を与えません

ご協力いただければ幸いです。

#include "stdafx.h" 

void calories(int total, int*pizza, int*chips, int*apple, int*mustard) 

{ 
if (total >= 385) 
    *pizza = (total - 385); 
if (total >= 170) 
    *chips = (total - (*pizza * 385))/170; 
if (total >= 80) 
    *apple = (total - (*pizza * 385) - (*chips * 170))/80; 
if (total >= 5) 
    *mustard = (total - (*pizza * 385) - (*chips * 170) - (*apple * 80))/5; 

return; 
} 

int main(void) 

{ 

int total, pizza, chips, apple, mustard; 

printf("Enter the total whole number of calories you would like to eat for your meal: "); 
scanf_s("%d", &total); 
calories(total, &pizza, &chips, &apple, &mustard); 
printf("\n Total= %d", total); 
printf("\nSlices of pizza= %d", chips); 
printf("\nBags of chips= %d", pizza); 
printf("\nSlices of apple= %d",apple); 
printf("\nTeaspoons of mustard= %d", mustard); 

return 0; 
} 
+1

整数演算の場合はコードが大量に実行されます。おそらく浮動小数点が必要でした。 IACは、 "私が最初に入力したカロリーを超えるチップの総数を得る"と、それが間違っていると思う理由を投稿する。 – chux

+0

1. 'scanf_s'の戻り値を確認します。2.初期値をゼロに設定します。 –

+0

1)何をしましたか? 2)何が起こると思いますか? 3)代わりに何が起こったのですか?あなたは1に答えましたが、2または3には答えませんでした。 – immibis

答えて

0

私は、これはあなたが

if (total >= 385) { 
    *pizza = total/385; 
    total = total - *pizza * 385; 
} 
if (total >= 170) { 
    *chips = total/170; 
    total = total - *chips * 170; 
} 

etc... 

すなわち実行中の合計

PSを合計保つ採用すべきであるパターンだと思う:あなたは本当にについては詳しく説明し、より良い食生活

+0

あなたの助けをありがとう!これらすべての回答の組み合わせが私の問題を解決しました。 –

1

を取得する必要があります@ EdHealのコメントでは、変数pizza, chips, apple, mustardをスタックに宣言しています。 Cのスタック変数は自動的にゼロに設定されません。それらをあなた自身で何らかの価値に初期化する必要があります。

あなたはcalories()関数に変数のアドレスを渡しますが、その関数の内部で、あなたは変数に値を割り当てないカロリー数が一定数以上である場合を除きます。したがって、カロリーカウントが「低すぎる」ときはいつでも、変数にはランダムな値が設定されます。

最も簡単な解決策は、宣言で変数を初期化するために、次のようになります。

int pizza = 0, chips = 0, apple = 0, mustard = 0; 

少ないシンプルですが、実際にはより良い、という考えはcalorie機能であなたの文にelse句を追加し、設定することです合計が大きい、まだあなたは合計の値を小さくしていない場合は、あなたが求めているif文もあなたがしたいように見える...それぞれに

if (total >= 385) 
    *pizza = total/385; 
else 
    *pizza = 0; 

/* etc ... */ 
1

:ゼロへの目標値は、あなたは彼らのために別の値を持っていない場合複数を処理するピザを印刷するための

printf("\nSlices of pizza= %d", chips); 
printf("\nBags of chips= %d", pizza); 

あなたはその逆のチップ値とを与えた:質問のprintf文でこの可能性に

*pizza = total % 384; 
total -= *pizza * 384; 

*chips = total % 170; 
total -= *chips * 170; 

... do similar here for next purchase ... 
... etc 
1

エラーに対応するために、場合などピザの量は、まだあなたの定義されていません。

if (total >= 385) 
    *pizza = (total - 385); 

上記は間違った結果につながる可能性があります。

希望すると、これが役立ちます。