简单无限while循环--c

简单无限while循环--c,c,while-loop,infinite-loop,C,While Loop,Infinite Loop,我知道我应该自己调试这个。。。但是相信我,我试过了,我很尴尬。我不明白为什么我的while循环是无限循环的。有人能帮忙吗 #include <stdio.h> int main ( void ) { double milesDriven; double gallonsUsed; double totalMilesDriven; double totalGallonsUsed; float milesPerGallon; float t

我知道我应该自己调试这个。。。但是相信我,我试过了,我很尴尬。我不明白为什么我的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;    
}
#包括
内部主(空)
{
双英里驱动;
双加仑;
双总里程驱动;
双总加仑;
漂浮牛奶;
浮动总mpg;
printf(“%s”,“输入使用的加仑数(-1到结尾):”;
scanf(“%i”和“gallonsUsed”);
printf(“输入行驶里程:”);
扫描频率(“%i”和milesDriven);
同时(加仑行驶!=-1 | |英里行驶!=-1)
{
总加仑消耗量+=加仑消耗量;
总行驶里程+=行驶里程;
milesPerGallon=(行驶英里/加仑);
printf(“此油箱的英里/加仑为%f\n”,milesPerGallon);
printf(“%s”,“输入使用的加仑数(-1到结尾):”;
scanf(“%i”和“gallonsUsed”);
printf(“输入行驶里程:”);
扫描频率(“%i”和milesDriven);
}
totalMpG=(总行驶里程/总加仑);
printf(“总平均英里/加仑为%.6f\n”,总英里/加仑);
返回0;
}

乍一看,似乎您使用的是浮点数据类型,而实际上您应该使用整数

"%i" // expects an integer

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

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

"%i" // expects an integer
尝试使用
int
数据类型,或将格式更改为
%lf”

在这里,如果用户将输入gallonsessed=-1和milesDriven=2(假设),则

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

同样,如果加仑数=2(假设)和英里数=1,则

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

当加仑数=-1,行驶里程=-1时

然后只有与while(0)=>等价的while(0 | | 0)才能从while循环中出来

现在,如果您看到(galloused=-1和milesDriven=-1)中的任何一个,那么在这种情况下,使用while(galloused!=-1&&milesDriven!=-1)

在这里,如果用户将输入gallonsessed=-1和milesDriven=2(假设),则

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

同样,如果加仑数=2(假设)和英里数=1,则

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

当加仑数=-1,行驶里程=-1时

然后只有与while(0)=>等价的while(0 | | 0)才能从while循环中出来


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

也许您希望| |&?另外,scan(“%i”)参数是双精度的。不是整数。可能您希望scanf(“%lf”,…)可能您希望| |成为&?此外,scan(“%i”)参数是双精度的。不是整数。可能您需要scanf(“%lf”,…)
-1
是可以精确表示的值之一,尽管您的小心警告很贴切,但它与此特定情况无关。但是,+1,因为你几乎肯定解决了这个问题。@paxdiablo是的,老实说,我没有检查。我会编辑我的回答谢谢!我承认,我是C的新手,所以我不知道双倍的%lf
-1
是可以精确表示的值之一,虽然您的小心警告很贴切,但它与此特定情况无关。但是,+1,因为你几乎肯定解决了这个问题。@paxdiablo是的,老实说,我没有检查。我会编辑我的回答谢谢!我承认,我是C的新手,所以我不知道双倍的%lf!