2017-02-19 45 views
0

我之前在这里发布过,但我从来没有能够得到我需要的帮助。 我正在进行一个学校项目,我无法让我的程序正常工作。代码忽略了C语言中的IF命令,问题与FOR

程序应该提示用户输入使用的加仑数和为3个气罐中的每一个驱动的英里数。程序应该 然后计算并显示每个罐获得的每加仑英里数。一旦 处理完成3个坦克,该计划将计算总里程(总加仑/总里程),并显示友好的“再见”信息。

我遇到的问题是我无法将它展示给OVERALL Millage。它在循环3次后结束。 我知道不同的循环语句需要符合条件,但我不能让FOR循环正常工作。我真的很沮丧,因为我知道这不应该这么难。

代码

#include <stdio.h> 
int main(void) 
{ 
    int miles,i=3; 
    float gallons, mg, overall = 0, avg = 0; 
    while(i>0) 
    { 
     printf("Enter the gallons used: "); 
     scanf("%f", &gallons); 
     printf("Enter miles driven: "); 
     scanf("%d", &miles); 
     mg = miles/gallons; 
     printf("The miles/gallon for this tank was : %f\n", mg); 
     overall += miles; 
     avg += gallons;i--; 
    } 

    if(gallons == 0) 
    { 
     printf("\n\n The overall miles/gallon was: %f\n", overall/avg); 
     exit(0); 
    } 
    return 0; 
} 
+5

'如果(加仑== 0)'... emmm.why? –

+2

你能整理出代码的格式吗 –

+2

条件'if(gallons == 0)'从不是真的,因此print语句永远不会发生。 –

回答

4

如果我正确地读出你的代码,那么什么是防止整体里程被打印如下最终if声明:

if (gallons == 0) 

如果你删除它,然后应打印总里程。使用此模式:

while (i > 0) 
{ 
    // your while loop here 
} 

printf("\n\n The overall miles/gallon was: %f\n", overall/avg); 
exit(0); 
+0

非常感谢。我很难在这个课堂中环绕大脑。这工作。我觉得这很简单。但我一直在为此工作一个星期,并且感到恼火。 –

+0

@MikeDahl为了大家的缘故,也许你可以评论为什么你在那里有'if(加仑== 0)'。也许你正在检查循环完成,或者你想检查除以零? –

+1

我把它放在里面,因为我是个傻瓜,而且我仍然试图理解所有这些。 –

0

添加到Tim Biegeleisen'的回答是:

mg = miles/gallons; 

如果gallons等于0?例如0英里0加仑
这将导致浮点异常。

一个简单的if-else可以解决这个问题!

if(!gallons) 
    mg = 0; 
else 
    mg = miles/gallons; 
+0

由于这将是一个浮点计算,因此它可能会给出无穷大的结果,而不是崩溃。它很好奇,但现在,生成FPE(浮点异常)的几种方法之一是_integer_除零。 –

+0

@JonathanLeffler谢谢!在我的终端上,我正在执行整数除法,这个除数是'0'。所以我的错误陈述。 – rootkea

0

如果(if (gallons == 0) {})块超出while循环。 首先,你需要在while循环中移动if循环。 和这个如果条件应该为变量我如下,而不是加仑。

if (i == 0) 
{ 
    printf("\n\n The overall miles/gallon was: %f\n", overall/avg); 
} 

在这种情况下,经过3次迭代中,i值将是0,因此将进入如果块,并计算和打印总英里/加仑。

0

你应该把 if (gallons == 0) { /* print something that says gallons can't be 0 and skip the mg = miles/gallons to avoid a divide by zero ! */ }

我无法看到for循环给出任何建议。

其中为平均计算=总/平均

if (gallons == 0) { /* print something that says gallons can't be 0 
and skip the mg = miles/gallons to avoid a divide by zero ! */ 
} 
if (gallons == 0) { /* print something that says gallons can't be 0 
and skip the mg = miles/gallons to avoid a divide by zero ! */ 
} 
enter code here 

and then printing the avg ? `printf();` 

if (gallons == 0) { /* print something that says gallons can't be 0 
and skip the mg = miles/gallons to avoid a divide by zero ! */ 
} 

`

+2

你的答案现在完全不可读,请问你能编辑还是删除它? –