程序编译但没有给出正确的值

时间:2016-04-13 03:38:50

标签: c windows

我正在为我的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;
}

4 个答案:

答案 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:你应该真的得到更好的饮食