我的c输出总是0

时间:2016-11-17 07:45:44

标签: c

当我运行这个c程序来计算BMI时,我得到的输出总是0 我能知道这个问题吗?我能够得到w和h的值,但似乎bmi继续返回0作为结果

#include <stdio.h>

int main()
{
    float w, h, bmi;
    printf("please enter your weight in kg");
    scanf("%d", &w);
    printf("please enter your height in m");
    scanf("%d", &h);

    bmi = (w/(h*h));
    printf("Your BMI is %d\n", bmi);
    return 0;

}

2 个答案:

答案 0 :(得分:0)

scanf("%d", &w);

应该是

scanf("%f", &w);

您使用错误的格式说明符来扫描浮点数。您应该使用%f

答案 1 :(得分:0)

您的scanf格式说明符错误。

正如您在the Man

上看到的那样
  

<强> d

     

匹配可选的带符号十进制整数;下一个指针必须是指向int的指针。

所以你需要一个不同的:

  

<强>˚F

     

匹配可选的带符号浮点数;下一个指针必须是指向float的指针。

然后你的代码至少应该是:

#include <stdio.h>

int main( void )
{
    float w, h, bmi;
    printf("please enter your weight in kg: ");
    scanf("%f", &w);
    printf("please enter your height in m: ");
    scanf("%f", &h);

    bmi = (w/(h*h));
    printf("Your BMI is %f\n", bmi);
    return 0;

}

您还可以查看scanf返回值

  

返回值

     

这些函数返回成功匹配和分配的输入项的数量,可以少于提供的数量,或者在早期匹配失败的情况下甚至为零。

换句话说就是:检查返回值。如果您期望单个float,则scanf必须返回1,如果输入了有效输入

#include <stdio.h>

int main()
{
    float w = 0;
    float h = 0;
    float bmi = 0;

    printf("please enter your weight in kg: ");

    if (scanf("%f", &w) == 1)
    {
        printf("please enter your height in m: ");
        if (scanf("%f", &h) == 1)
        {
            if (h!=0)
            {
                bmi = (w/(h*h));
                printf("Your BMI is %f\n", bmi);
            }
            else
            {
                printf("Height cannot be 0!\n");
            }
        }
        else
        {
            printf("Error inputing height!\n");
        }
    }
    else
    {
        printf("Error inputing weight!\n");
    }

    return 0;
}

正如您所看到的,最后一件事是您必须检查输入的身高是否为!= 0