C 程序返回inf?
我认为错误在于这一行:C 程序返回inf?,c,floating-point,C,Floating Point,我认为错误在于这一行: float bmi = weight * 703 / pow(height, 2.0); // user inputs weight and height and the bmi should be calculated. 问题是,我创建了一种模拟程序,其中的值已经输入,一切都很好。但是当我使用scanf()让用户输入相同的值时,它就不起作用了 #include <stdio.h> #include <math.h> int main () {
float bmi = weight * 703 / pow(height, 2.0); // user inputs weight and height and the bmi should be calculated.
问题是,我创建了一种模拟程序,其中的值已经输入,一切都很好。但是当我使用scanf()让用户输入相同的值时,它就不起作用了
#include <stdio.h>
#include <math.h>
int main ()
{
float weight = 105, height = 63;
float bmi;
bmi = weight * 703 / pow(height, 2.0);
printf("%f\n", bmi);
}
另一个输入语句与单词height代替weight基本相同
编辑:这是完整的代码
#include <stdio.h>
#include <math.h>
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);
}
#包括
#包括
int main()
{
浮子重量、高度;
浮动体重指数=体重*703/功率(身高,2.0);
printf(“高度?”);
扫描频率(“%f”和高度);
printf(“重量?”);
扫描频率(“%f”和重量);
printf(“您的体重指数计算为%.2f.\n”,体重指数);
printf(“%f\n”,高度);
printf(“%f\n”,重量);
}
您使用的是未初始化的重量
和高度
:
float weight, height;
float bmi = weight * 703 / pow(height, 2.0);
这是未定义的行为,这就是为什么您得到inf
,在我的例子中,我得到0.00
,但在UB下任何事情都可能发生
改为
#include <stdio.h>
#include <math.h>
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;
}
#包括
#包括
内部主(空)
{
浮子重量、高度;
浮动体重指数;
printf(“高度?”);
扫描频率(“%f”和高度);
printf(“重量?”);
扫描频率(“%f”和重量);
体重指数=体重*703/功率(身高,2.0);
printf(“您的体重指数计算为%.2f.\n”,体重指数);
printf(“%f\n”,高度);
printf(“%f\n”,重量);
返回0;
}
您使用的是未初始化的重量
和高度
:
float weight, height;
float bmi = weight * 703 / pow(height, 2.0);
这是未定义的行为,这就是为什么您得到inf
,在我的例子中,我得到0.00
,但在UB下任何事情都可能发生
改为
#include <stdio.h>
#include <math.h>
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;
}
#包括
#包括
内部主(空)
{
浮子重量、高度;
浮动体重指数;
printf(“高度?”);
扫描频率(“%f”和高度);
printf(“重量?”);
扫描频率(“%f”和重量);
体重指数=体重*703/功率(身高,2.0);
printf(“您的体重指数计算为%.2f.\n”,体重指数);
printf(“%f\n”,高度);
printf(“%f\n”,重量);
返回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);
}
您需要在使用变量之前初始化它们
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);
}
我认为您假设这定义了bmi
的含义,并且bmi
的值将随着weight
和height
的变化而变化
我记得我第一次开始编程时也犯过类似的错误。与数学方程不同,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有一些限制,这使得这很困难,一些编译器可能仍然不支持它。)
我认为您假设这定义了bmi
的含义,并且bmi
的值将随着weight
和height
的变化而变化
我记得我第一次开始编程时也犯过类似的错误。与数学方程不同,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有一些限制,使得这很困难,一些编译器可能仍然不支持它。)您给出的最小示例应该包括这个问题。如果输入给您带来麻烦,请给出一个示例,说明您获取输入和键入的输入。
printf()
除了bmi
之外的height
值,看看它是否是您期望的值。嗯,好的。完成此操作后,出于某种原因,程序会打印数字,但会在数字上添加6位小数,这可能与此有关。100打印100.000000您提供的信息无法再现您的问题。只需上传整个代码