2016-11-17 3 views
-3

Когда я запускаю эту программу c для вычисления BMI, вывод i get всегда 0 Могу ли я знать, в чем проблема? я могу получить значение ш и ч, но это, кажется, BMI постоянно возвращается 0 в результатеМой вывод c всегда 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

''% d "' -----> ''% f "' ... Посмотрите на [спецификаторы формата] (https://linux.die.net/man/3/scanf) – LPs

+0

'scanf ("% d ", &w);' -> 'scanf ("% f ", &w);' и аналогично –

+0

Кроме того, если вы используете неправильные спецификаторы, 'scanf' и' printf' будут отображаться неопределенное поведение. –

ответ

0
scanf("%d", &w); 

должен быть

scanf("%f", &w); 

Вы используете неправильный спецификатор формата, чтобы сканировать плавать. Вы должны использовать %f

0

Ваш спецификатор формата для 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.

+1

don ; забыть печать ....... –

Смежные вопросы