2016-04-13 28 views
0

C programlama sınıfım için bir kalori programı yazıyorum ve derlediğimde doğru çıktıyı alamıyorum. Örneğin, kalori sayısını 385 olarak giriyorum ve orijinal olarak girdiğim kalorileri aşan toplam yonga sayısı elde ediyorum. Aşağıdaki kodu ekledim.Program derler ama doğru değeri vermez

Herhangi bir yardım büyük memnuniyetle karşılanacaktır.

#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

Tamsayı aritmetiği varsa kod çok iş yapıyor. belki de kayan nokta istedin. IAC, "başlangıçta girdiğim kalorileri aşan toplam yonga sayısını al" ve neden yanlış olduğunu düşündüğünüzü bildirin. – chux

+0

1. 'scanf_s''ün dönüş değerini kontrol edin 2. Başlangıç ​​değerlerini sıfır olarak ayarlayın. –

+0

1) Ne yaptın? 2) Ne olmasını beklediniz? 3) Bunun yerine ne oldu? 1 ya da 2 değil cevapladınız. – immibis

cevap

0

Sana

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

etc... 

yani çalışan toplam

PS toplam tutmak benimsemeli bu model olduğunu düşünüyorum: Gerçekten

+0

Yardımlarınız için teşekkür ederiz! Tüm bu cevapların bir araya gelmesi sorunumu çözdü. –

1

üzerinde durmak için daha iyi bir diyet almalısınız @ EdHeal'in yorumunda, değişkenlerinize pizza, chips, apple, mustard değişkenini bildiriyorsunuz. C'deki yığın değişkenleri otomatik olarak sıfıra ayarlanmaz. Onları bir değerle kendiniz başlatmalısınız.

Sen calories() işleve değişkenlerin adresini geçmesi, ama bu işlevi içinde sen değişkenlere değer atama yok kalori sayısı belirli sayısından daha büyük olmadıkça. Bu yüzden, kalori sayımı "çok düşük" olduğunda, değişkenlerin içinde rastgele değerler olacaktır.

basit çözüm bildirim sırasında değişkenlerini başlatmak olacaktır:

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

Daha az basit ama aslında daha iyi fikir calorie fonksiyonunda İfadeleriniz bir else madde eklemek ve ayarlamak olacaktır toplam büyüktür henüz toplam değerini azaltarak değilse soruyorsun deyimi ise ayrıca isteyen benziyor ... her günü

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

/* etc ... */ 
1

: sıfıra hedef değerler onlar için başka bir değer yoksa çoklu işlemek Pizza yazdırmak için

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

Eğer tersi cips değer ve verdi: sorular printf ifadeleri bu olanağını

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

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

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

Hatası karşılamak için eğer vb pizza miktarları, henüz istemiyorsun, mutfakta annene tanımlayan değildir. Size Üstü

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

yanlış sonuca yol açabilir tarafından 385 sayısına bölünmesi değildir.

Bu yardımcı olacaktır umarım.

İlgili konular