程序返回inf?

我认为错误在于这一行:

float bmi = weight * 703 / pow(height, 2.0); // user inputs weight and height and the bmi should be calculated. 

问题是,我创建了一个模拟程序,其中已经放入了值,一切都很好。 但是,当我使用scanf()让用户输入相同的值时,它不起作用。

 #include  #include  int main () { float weight = 105, height = 63; float bmi; bmi = weight * 703 / pow(height, 2.0); printf("%f\n", bmi); } 

重量和高度都是浮子。 当我尝试打印bmi时,我得到“inf”。

**编辑显示输入function和打印声明。

  printf("Weight? "); scanf("%f", &weight); printf("BMI is %.2f.\n", bmi); 

另一个输入语句与替换权重的单词高度基本相同。

编辑:这是整个代码

 #include  #include  int main () { float weight, height; float bmi = weight * 703 / pow(height, 2.0); printf("Height? "); scanf("%f", &height); printf("Weight? "); scanf("%f", &weight); printf("Your BMI is calculated at %.2f.\n", bmi); printf("%f\n", height); printf("%f\n", weight); } 

您正在使用未初始化的weightheight

  float weight, height; float bmi = weight * 703 / pow(height, 2.0); 

这是未定义的行为,这就是为什么你得到inf ,在我的情况下我得到0.00 ,但任何事情都可以在UB下发生。

改成

 #include  #include  int main(void) { float weight, height; float bmi; printf("Height? "); scanf("%f", &height); printf("Weight? "); scanf("%f", &weight); bmi = weight * 703 / pow(height, 2.0); printf("Your BMI is calculated at %.2f.\n", bmi); printf("%f\n", height); printf("%f\n", weight); return 0; } 

您需要在使用变量之前初始化变量。

 int main () { float weight, height; float bmi; printf("Height? "); scanf("%f", &height); printf("Weight? "); scanf("%f", &weight); bmi = weight * 703 / pow(height, 2.0); printf("Your BMI is calculated at %.2f.\n", bmi); printf("%f\n", height); printf("%f\n", weight); } 
 float weight, height; float bmi = weight * 703 / pow(height, 2.0); 

我认为你假设这定义了bmi的含义,并且当weightheight发生变化时, bmi的值会发生变化。

我记得在我第一次开始编程时犯了类似的错误。 与数学方程不同,C中的语句按顺序执行。 您很快就会了解影响该顺序的方法,但是对于像这样的小程序,这些语句是线性执行的。

初始化就像一个赋值。 这个:

 float bmi = weight * 703 / pow(height, 2.0); 

做同样的事情:

 float bmi; bmi = weight * 703 / pow(height, 2.0); 

它将bmi的值设置为评估时表达式的结果。 由于尚未为weightheight分配值,因此它们的值是垃圾,而分配给bmi的表达式结果也是垃圾。 您稍后打印未更改的垃圾值。

如果你想让bmi成为你引用时评估的东西,而不是你定义它时,你可以使它成为一个函数 – 但在这种情况下这不是必需的。 相反,只需确保为bmi指定的值有效,这意味着必须widthheight指定值计算它。

删除bmi声明的初始化,并在有效值存储在width和height`之后添加等效赋值

 float weight, height; float bmi; /* remove initializer */ printf("Height? "); scanf("%f", &height); printf("Weight? "); scanf("%f", &weight); /* add an assignment here */ bmi = weight * 703 / pow(height, 2.0); 

正如其他人建议的那样,您也可以在程序中稍后移动声明和初始化。 (早期版本的C有限制使这很困难,有些编​​译器可能仍然不支持它。)