我有一个循环,以这种格式打印出10个用户的不同BMI值:
USER BMI STATUS
1
:
10
BMI状态是字符串"Overweight", "Normal" , "Underweight", and "Obese"
我已经想出如何从我得到的here这个很棒的答案中打印出新行上的BMI值,但我仍然觉得很难显示BMI状态。
这是我拥有的,
#include <stdio.h>
#include <math.h>
int main(void) {
float weight_value[10];
float user_height[10];
float BMI = 0.0f;
char* BMI_Status[] = {"Underweight", "Normal", "Overweight", "Obese"};
int i;
for ( i = 0; i < 10; i++ )
{
printf("Please enter your weight: ");
scanf("%f", &weight_value[i]); //Reads in the user's weight and stores it in an array
printf("Now enter your height: ");
scanf("%f", &user_height[i]); //Reads in the user's height and stores it in an array.
}
printf("\n");
printf("USER BMI STATUS\n");
for ( i = 0; i < 10; i++ )
{
BMI = weight_value[i] / (user_height[i] * user_height[i]);
printf("%2d %23.7f \n", i+1 , BMI );
}
return 0;
}
我创建了一个包含BMI Status字符串的字符数组,但由于这些是将从代码中的表达式推导出来的字符串,所以我不知道如何在每一行上打印它们。
我想过使用if
条件来测试BMI值何时为真,但是当我到达我要添加打印出BMI状态字符串的参数的部分时,我得到了困惑。
答案 0 :(得分:2)
如果你真的需要一行中的所有东西,你可以写出所有第三运算符表达式的母亲:
printf("%2d %23.7f %23s", i+1, BMI, BMI_Status[(BMI<18.5 ? 0 : (BMI < 24.9 ? 1 : (BMI < 29.9 ? 2 : 3)))])
实际上,这只是将Joe M的答案归结为单行的if-elseif-else风格。请注意,我绝不会在生产代码中写这样的东西,而是 其他人建议的东西。
答案 1 :(得分:0)
要根据计算的BMI打印状态,您需要选择保存状态值的数组的正确索引。您可以使用单独的变量实现相同的功能。检查以下代码以获得一个想法。
#include <stdio.h>
#include <math.h>
int main(void) {
float weight_value[10];
float user_height[10];
float BMI = 0.0f;
char* BMI_Status[] = {"Underweight", "Normal", "Overweight", "Obese"};
int i;
int flag = -1; //used as index
for ( i = 0; i < 10; i++ )
{
printf("Please enter your weight: ");
scanf("%f", &weight_value[i]); //Reads in the user's weight and stores it in an array
printf("Now enter your height: ");
scanf("%f", &user_height[i]); //Reads in the user's height and stores it in an array.
}
printf("\n");
printf("USER BMI STATUS\n");
for ( i = 0; i < 10; i++ )
{
BMI = weight_value[i] / (user_height[i] * user_height[i]);
//after getting the BMI value, select the string index to be printed
if (BMI < 18.5)
{
flag = 0;
}
else if ((BMI > 18.5) && (BMI < 24.9 ))
{
flag = 1;
}
else if ((BMI > 24.9) && (BMI < 29.9 ))
{
flag = 2;
}
else if (BMI > 30)
{
flag = 3;
}
printf("%2d %23.7f \t\t%s\n", i+1 , BMI, BMI_Status[flag] ); //print the stats
}
return 0;
}
注意:您可能需要添加一些检查以验证数据。