我正在为我的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;
}
答案 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 :(得分:1)
在每个if语句中,你要问的是总数是否更大但你没有减少总数...也看起来你想要处理多个数量的比萨饼等但你没有定义你的if问题以适应这种可能性
*pizza = total % 384;
total -= *pizza * 384;
*chips = total % 170;
total -= *chips * 170;
... do similar here for next purchase ...
... etc
答案 2 :(得分:1)
printf语句出错:
printf("\nSlices of pizza= %d", chips);
printf("\nBags of chips= %d", pizza);
对于打印披萨,你给了筹码价值,反之亦然。
if (total >= 385)
*pizza = (total - 385);
上面你没有将总数除以385,这可能会导致错误的结果。
希望这会有所帮助。
答案 3 :(得分:0)
我认为这是你应该采用的模式
if (total >= 385) {
*pizza = total / 385;
total = total - *pizza * 385;
}
if (total >= 170) {
*chips = total/170;
total = total - *chips * 170;
}
etc...
即。保持总运行总量
PS:你应该真的得到更好的饮食