C - 如何为评估表达式的结果打印出不同的字符串?

时间:2014-10-30 14:03:36

标签: c string char

我有一个循环,以这种格式打印出10个用户的不同BMI值:

                        USER    BMI    STATUS
                        1
                        :
                        10

BMI状态是字符串"Overweight", "Normal" , "Underweight", and "Obese"

  1. 体重不足 - 当BMI低于18.50
  2. 正常 - 当BMI为18.50至24.9
  3. 超重 - 当BMI为25.0至29.9
  4. 肥胖 - 当BMI大于30.0
  5. 我已经想出如何从我得到的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状态字符串的参数的部分时,我得到了困惑。

2 个答案:

答案 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;
}

注意:您可能需要添加一些检查以验证数据。