【问题标题】:I'm having trouble ending a loop in C我无法在 C 中结束循环
【发布时间】:2017-02-16 04:12:00
【问题描述】:

我在学校学习 C。(我不是要求任何人为我写这个)。

作业
在您输入所用加仑数和行驶里程数后,此程序将为您计算三箱汽油的每加仑英里数MPG

我可以让我的程序开始一个循环,但我不知道如何让它在 3 次运行后结束循环并给我 3 个坦克的平均 MPG。运行程序给我一个平均值,但会一直问。

#include <stdio.h>
int main(void) {
int miles;
float gallons = -1, mg, overall = 0, avg = 0;
while(gallons != 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;
}
  return 0;
}

【问题讨论】:

  • int run = 3; while(run-- && 加仑!=0) { ... }
  • “运行程序给我平均值,但会一直询问” - 你的意思是它会打印“整体......”消息,然后继续询问您行驶里程数吗?跨度>
  • 考虑在你的代码中使用更多的空格。读起来很费劲。 Example.
  • 它会一直问同样的 2 个问题。我试图让它在 3 个循环后停止,平均 3 个 MPG。我希望这对你们都有意义。

标签: c loops


【解决方案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;
}

【讨论】:

  • 这给了我很多错误。我需要删除**
【解决方案2】:

抱歉:我没有看到 gallons 在您的代码中是如何被分配/初始化的,我看到 float galonswhile (gallons != 0) 然后认为 gallons 在某些时候是计算结果。

我认为这个答案仍然有用。

不要使用float 值来检查条件,floats 不准确,因为它们的机器表示不可能,所以gallons != 0 可能几乎永远不会是真的,改用int,你的循环控制将正常工作。仅使用float 作为平均值。

但实际上,因为你的具体问题可以用for循环解决,你应该使用

for (int i = 0 ; i < 3 ; ++i)

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

旁注:详细了解 scanf() 以及为什么必须检查它在像您这样的程序中返回的值。

【讨论】:

  • 一般情况下是这样,但我不认为是这样,因为零是一个既可以精确存储又可以通过 scanf 精确读取的数字(例如,如果键入为 0
【解决方案3】:

您的程序,如所写,不会停留在 3 个坦克上。它会不断地询问坦克,直到您对使用的加仑数回答 0。

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

但它不会打印整体平均值。它会在运行三遍后简单地退出。显示总体平均值的代码位于检查您是否输入 0 加仑的 if 测试中。删除 if 测试并移动 printf 语句,该语句显示接近程序末尾的总体平均值,就在 return 语句之前。这样它就会在for循环运行3次后运行。

【讨论】:

    【解决方案4】:
    float gallons = -1;
    

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

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

    如果要输入加仑,则您要求用户输入值,并且您不更改它的值,因此该值在 while 中始终为真,并且循环将变为无限。

    如果您需要运行循环 3 次,则可以使用变量来完成。 `

    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;
     }
    

    `

    【讨论】:

    • 声明一个变量int i=3 ;**并改变**while(gallons != 0 && i>0){//code i--;}
    • 好的,所以我明白了,但是它仍然在循环中继续。我无法让它结束并显示 3 个循环后的整体平均 MPG。
    • float gallons=-1 将变量初始化为某个值,以便 while 循环在第一次运行时不会失败。是的,在while 循环中,他确实在通过scanf 调用更改值。
    • 无论您为 gallons 分配什么值,它都会在循环过程中发生变化,但正如@Mike 所说,他想运行循环三次。顺便说一句,如果你想第一次执行循环,那么你也有 do-while.
    • 为什么要投反对票。我已经成功运行了我的代码,如果您有任何问题,请提供示例 I/O。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    • 2021-02-15
    相关资源
    最近更新 更多