2013-04-26 75 views
1

我正在C中進行一項任務,在C中我必須閱讀多個人的身高和體重並確定他們的bmi。然後,我把它們歸類到各自的BMI類別,但我被陷在如何做到這一點正確的,這是我的代碼至今:BMI分類結構

# include <stdio.h> 

int main() { 

    int people; 
    double bmi, weight, inches; 

      printf("How many peoples? > "); 
      scanf("%d", &people); 

    do { 
      printf("Enter height (inches) and weight (lbs) (%d left) > ", people); 
      scanf("%lf %lf", &inches, &weight); 
      people--; 
    } 

    while (people > 0); 

      bmi = (weight/(inches * inches)) * 703; 

      if (bmi < 18.5) { 
        printf("Under weight: %d\n", people); 
      } 
      else if (bmi >= 18.5 && bmi < 25) { 
        printf("Normal weight: %d\n", people); 
      } 
      else if (bmi >= 25 && bmi < 30) { 
        printf("Over weight: %d\n", people); 
      } 
      else if (bmi >= 30) { 
        printf("Obese: %d\n", people); 
      } 
return 0; 
} 

我在哪裏去了?我在哪裏修復此代碼?

回答

1

使用一些數據結構來存儲數據。您獲得了多於一個人的輸入,但最終只能處理一個人。

而且people--;完成。所以people變量減少到零,這使得while退出而不執行您的BMI計算。

修改代碼:

#include <stdio.h> 

#define MAX_PEOPLE  100 

int main() { 

    int people; 
    double bmi[MAX_PEOPLE], weight[MAX_PEOPLE], inches[MAX_PEOPLE]; 

    int index = 0; 

      printf("How many peoples? > "); 
      scanf("%d", &people); 

    index = people; 

    do { 
      printf("Enter height (inches) and weight (lbs) (%d left) > ", index); 
      scanf("%lf %lf", &inches[index], &weight[index]); 
      index--; 
    }while (index > 0); 

     for(index = 0; index < people; index++) 
     { 

      bmi[index] = (weight[index]/(inches[index] * inches[index])) * 703; 

      if (bmi[index] < 18.5) { 
        printf("Under weight: %d\n", index); 
      } 
      else if (bmi[index] >= 18.5 && bmi[index] < 25) { 
        printf("Normal weight: %d\n", index); 
      } 
      else if (bmi[index] >= 25 && bmi[index] < 30) { 
        printf("Over weight: %d\n", index); 
      } 
      else if (bmi[index] >= 30) { 
        printf("Obese: %d\n", index); 
      } 
     } 
return 0; 
} 
+0

你是否建議分配另一個變量來表示「people--」,比如y = people--;? – Student 2013-04-26 10:18:47

+0

請參閱我更新的代碼,並嘗試按照您的風格進行操作。 – Jeyaram 2013-04-26 10:23:35

+0

謝謝!即時通訊將使用你所做的,並重新編寫我的代碼,所以我可以肯定,我完全理解它 – Student 2013-04-26 10:32:39

0

現在你正在處理相同的數據。

每次您爲重量指定一個新值時,舊的值將被刪除。

您可以創建多個變量,像這樣:

double weight1, weight2, weight3, weight4, ...等(高度不實用!!) 或 創建雙打的數組:

double weight[100]; 

,並參考各個特定的雙變量像這樣:

scanf("%lf %lf", inches[0], weight[0]); 
scanf("%lf %lf", inches[1], weight[1]); 
scanf("%lf %lf", inches[2], weight[2]); 

你看到我在哪裏?您可以操作陣列tru a for loop

+0

所以我能夠重新編寫代碼,但輸出我需要遵循以下詳細說明的某種方式,在使用它一段時間後我無法得到它,我的輸出應該如下所示:處理3人,並發現:重量不足:0正常體重:1超重:1肥胖:1警告!人口可能是不健康的,它實際上打印出所有0的類別,然後我加總超重和肥胖的總值,如果這個值超過總數的一半,那麼我打印警告,但是我似乎只得到在該BMI範圍內的 – Student 2013-04-26 16:01:52

+0

人的打印聲明,即沒有「0正常體重的人」等,我似乎不知道如何總是存儲數據,所以我總是有打印每個類別,即使其爲零,然後如何引用回該數據以便能夠再次比較以查看整體流行音樂是否超重,將不勝感激任何幫助 – Student 2013-04-26 16:02:39