2016-04-13 78 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; 

一個不太簡單,但實際上更好的辦法是將一個else條款添加到您的報表中calorie功能,並設置目標值零,如果你沒有爲他們另一個值:

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

/* etc ... */ 
1

在每個if語句你是問,如果總大於但你是不是減少了總價值...也像你想處理多個比薩餅的數量等而你沒有定義您如有問題,以適應這種可能性

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

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

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

錯誤printf語句:

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

對於打印比薩餅你給芯片價值,反之亦然。

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

上面你沒有將總數除以385,這可能會導致錯誤的結果。

希望這會有所幫助。