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您提供的信息无法再现您的问题。只需上传整个代码