我在用C结束循环时遇到了麻烦

时间:2017-02-16 04:12:01

标签: c loops

我在学校学习C.(我不是要求任何人为我写这篇文章)。

  

分配
  在您输入使用的加仑数和行驶里程后,该程序将为您计算三加仑汽油的每加仑英里数 MPG

我可以让我的程序启动一个循环,但我无法弄清楚如何让它在3次运行后结束循环并给我3个坦克的平均MPG。运行程序给了我平均值,但会永远地问。

i

4 个答案:

答案 0 :(得分:1)

尝试这个小改动。使用迭代器来获得3个坦克的平均值。

一样修改
i=0;
while(i < 3) {
i++;
#include <stdio.h>
int main(void) {
int miles, **i=0;**  
float gallons = -1, mg, overall = 0, avg = 0; 
**while(i < 3)** {
  printf("Enter the gallons used: ");
  scanf("%f", &gallons);
  if (gallons == 0) {
    printf("\n\n The overall miles/gallon was: %f\n", overall/avg);
    exit(0);
    }
  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++;**
}
  return 0;
}

答案 1 :(得分:0)

抱歉:我没有看到您的代码中gallons是如何分配/初始化的,我看到了float galonswhile (gallons != 0)然后认为gallons 1}}在某种程度上是计算的结果。

在我看来,这个答案仍然有用。

不要使用float值来检查条件,float不准确,因为它们的机器代表不能,因此gallons != 0可能很难成为真,使用{相反,{1}}您的循环控件将正常工作。仅使用int作为平均值。

但事实上,因为你的具体问题可以通过float循环解决,你应该使用

for

相反,你知道它只会循环3次。

SIDE NOTE :了解有关for (int i = 0 ; i < 3 ; ++i) 的更多信息以及为什么必须检查它在像您这样的程序中重新调整的值。

答案 2 :(得分:0)

你的程序,正如所写,不会停在3辆坦克。它将不断询问坦克,直到你回答0加仑使用的数量。

要使其最多读取三个坦克,请将while (gallons != 0)替换为for (int i = 0; i < 3; i++)。这将使主循环仅运行三次。

然而,它不会打印整体平均值。它会在运行三次后退出。显示总体平均值的代码位于if测试内,用于检查您是否输入了0加仑。删除if测试并移动printf语句,该语句显示在return语句之前的程序结束附近的总体平均值。这样它将在for循环运行3次后运行。

答案 3 :(得分:-2)

float gallons = -1;

它没有任何意义; 你需要注意一件事

while(gallons!=0){
  //code
 }

您要求用户输入值,如果输入加仑而不更改它的值,那么此值将始终为真,而循环将变为无限。

如果你需要运行循环三次,那么你可以通过使用变量来完成。  `

int i=3;
while(i>0){//code 
i--;
}

我在这里编辑了你的程序;

#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);
if (gallons == 0) {
   printf("\n\n The overall miles/gallon was: %f\n", overall/avg);
 exit(0);
   }
 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--;
    }
 return 0;
 }

`