Ваш спецификатор формата для scanf ошибочен.
Как вы можете увидеть на the Man
д
Соответствует необязательно десятичное целое; следующий указатель должен быть указателем на int.
Так что вам нужно другое один:
е
Соответствует необязательно число с плавающей точкой; следующий указатель должен быть указателем на 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
.
''% d "' -----> ''% f "' ... Посмотрите на [спецификаторы формата] (https://linux.die.net/man/3/scanf) – LPs
'scanf ("% d ", &w);' -> 'scanf ("% f ", &w);' и аналогично –
Кроме того, если вы используете неправильные спецификаторы, 'scanf' и' printf' будут отображаться неопределенное поведение. –