Как вернуть строку из функции char - PullRequest
1 голос
/ 04 декабря 2009

Я хочу, чтобы функция getCategory () возвращала «недопустимый», вместо того, чтобы печатать слово «недействительный» (т.е. вместо использования printf), когда ввод в функцию недопустим (т. Е. Когда рост или вес меньше нуля) , пожалуйста, помогите:

#include<stdio.h>
#include<conio.h>
char getCategory(float height,float weight)
{
char invalid = '\0'; 
float bmirange;
if(height<=0 || weight<=0)
return invalid;
else
 {
height=height*0.01;       
bmirange=[weight/(height*height)];
if(bmirange< 15 )
   return starvation;
 }  
}

/* return the following to category
If bmi range < 15 then category is "starvation"
    If bmi range >=15 && bmi range < 18.5 then category is "underweight"
    If bmi range >=18.5 && bmi range < 25 then category is "normal"
    If bmi range >= 25 && bmi range < 30 then category is "overweight"
    If bmi range >=30 && bmi range < 40 then category is "obese"
    If bmi range >=40 then category is "morbidly obese
*/


int main()
 {
 char Category;
 float height,weight;
 printf("enter height");
 scanf("%f",&height);
 printf("enter weight");
 scanf("%f",&weight);
 Category=getCategory(height,weight);
 if(Category == 0)
 printf("invalid");
 else
 printf("%c", Category);
 }

Ответы [ 2 ]

1 голос
/ 04 декабря 2009

Измените тип возвращаемого значения на char *, затем верните указатель на строки различных категорий. Вам также необходимо заполнить чеки для различных уровней bmi.

Очень похоже на домашнюю работу; пожалуйста, отметьте это как таковой.

Вот мое решение ... но я рандомизировал порядок строк, так как вам нужно сделать свою домашнюю работу. В этом должно быть несколько подсказок, таких как struct и строки return.

    scanf("%f",&height);
struct bmicategory {
}
        {18.5, "normal"},
    return categories[i-1].name;
    float bmi = weight / (height * height);
    struct bmicategory categories[] = {
    printf("enter weight (in kg): ");

    };
    char *name;

    return 0;

        {40, "morbidly obese"},
        {15, "underweight"},
        }
    scanf("%f",&weight);
    for(i=1; i<sizeof(categories)/sizeof(struct bmicategory); i++) {
#include<stdio.h>
        if(bmi < categories[i].value) {
            break;
    printf("%s\n", category);
    height = height * 0.01;
    printf("enter height (in cm): ");
        {25, "overweight"},

    category=getBmiCategory(height,weight);

int main() {
    float value;
    int i;
    /* printf("BMI = %f\n", bmi); */
}
};
    float height;
        {30, "obese"},
    }
    char *category;

    char *name = NULL;
        {0, "starvation"},
char *getBmiCategory(float height, float weight) {
    float weight;
0 голосов
/ 04 декабря 2009

Я не вижу твоей проблемы. Вы не можете изменить тип возвращаемого значения в зависимости от параметров. Либо всегда возвращайте тип char, либо всегда возвращайте строку. Это ограничение языка (и я бы сказал, хорошее).

Я могу придумать два способа обойти это. Первый - вернуть объект или указатель на память. Однако после того, как вы получите результат, у вас все еще есть форк-код в зависимости от типа возвращаемого значения.

В вашем случае вы фактически описываете типичный вариант использования исключения. Бросьте исключение, если один из аргументов ниже нуля. Вы можете поймать свое исключение в main с помощью конструкции try-catch и перейти оттуда.

...