程序返回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); }
您正在使用未初始化的weight
和height
:
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
的含义,并且当weight
和height
发生变化时, bmi
的值会发生变化。
我记得在我第一次开始编程时犯了类似的错误。 与数学方程不同,C中的语句按顺序执行。 您很快就会了解影响该顺序的方法,但是对于像这样的小程序,这些语句是线性执行的。
初始化就像一个赋值。 这个:
float bmi = weight * 703 / pow(height, 2.0);
做同样的事情:
float bmi; bmi = weight * 703 / pow(height, 2.0);
它将bmi
的值设置为评估时表达式的结果。 由于尚未为weight
和height
分配值,因此它们的值是垃圾,而分配给bmi
的表达式结果也是垃圾。 您稍后打印未更改的垃圾值。
如果你想让bmi
成为你引用时评估的东西,而不是你定义它时,你可以使它成为一个函数 – 但在这种情况下这不是必需的。 相反,只需确保为bmi
指定的值有效,这意味着必须在为width
和height
指定值后计算它。
删除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有限制使这很困难,有些编译器可能仍然不支持它。)