当我运行这个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;
}
答案 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
。