【问题标题】:Simple infinite while loop-- c简单的无限while循环——c
【发布时间】:2013-09-18 01:08:44
【问题描述】:

我知道我应该自己调试...但相信我,我已经尝试过了,我很尴尬。我不明白为什么我的 while 循环是无限循环的。有人可以帮忙吗?

#include <stdio.h>

int main ( void )
{
    double milesDriven;
    double gallonsUsed;
    double totalMilesDriven;
    double totalGallonsUsed;
    float milesPerGallon;
    float totalMpG;

printf( "%s", " Enter the gallons used (-1 to end): " );
scanf( "%i", &gallonsUsed);

printf( " Enter the miles driven: " );
scanf( "%i", &milesDriven);


while ( gallonsUsed != -1 || milesDriven != -1)
{
     totalGallonsUsed += gallonsUsed;
     totalMilesDriven += milesDriven;

     milesPerGallon = ( milesDriven / gallonsUsed );
     printf( " The miles/gallon for this tank was %f\n", milesPerGallon );

     printf( "%s", " Enter the gallons used (-1 to end): " );
     scanf( "%i", &gallonsUsed);

     printf( " Enter the miles driven: " );
     scanf( "%i", &milesDriven);

}


totalMpG = ( totalMilesDriven / totalGallonsUsed );
printf( " The overall average miles/gallon was %.6f\n ", totalMpG); 
return 0;    
}

【问题讨论】:

  • 也许你想要那个 ||成为 && ?
  • 另外,scan("%i") 参数是双精度的。不是整数。也许你想要 scanf("%lf", ...)

标签: c while-loop infinite-loop


【解决方案1】:

乍一看,您似乎在使用浮点数据类型,而您应该使用整数。

"%i" // expects an integer

尝试使用int 数据类型,或将格式更改为"%lf"

【讨论】:

  • -1 是那些 可以 准确表示的值之一,虽然您要小心的警告很恰当,但在这种特定情况下并不相关。但是,+1,因为您几乎可以肯定地解决了问题。
  • @paxdiablo 是的,老实说,我没有检查。我会编辑我的答案
  • 谢谢!我承认,我是 C 新手,所以我不知道 double 的 %lf!
【解决方案2】:
 while ( gallonsUsed != -1 || milesDriven != -1)

如果用户在这里输入gallonsUsed = -1 和milesDriven = 2(比如说),那么

您的上述情况将是: while(0 || 1) ,相当于while(1)。

类似地,如果gallonUsed = 2(比如说)并且milesDriven = -1,那么

您的上述情况将是: while(1 || 0) ,这又等同于 while(1)。

当gallonUsed = -1 和milesDriven = -1 时

只有等价于 while(0) => 的 while(0||0) 才能退出 while 循环。

现在,如果您认为 (gallonUsed = -1 和 milesDriven = -1) 中的任何一个,在这种情况下,使用 while (gallonUsed != -1 && milesDriven != -1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-10
    • 2011-07-23
    • 2016-08-27
    • 2015-04-29
    • 1970-01-01
    • 2013-02-22
    • 2016-04-21
    • 2021-10-15
    相关资源
    最近更新 更多