我希望函数getCategory()返回“invalid”,而不是在函数输入无效时打印单词“invalid”(即代替使用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);
}
答案 0 :(得分:1)
将返回类型更改为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;
答案 1 :(得分:0)
我没有看到你的问题。您无法根据参数更改返回类型。始终返回char类型或始终返回字符串。这是一种语言限制(我会说一个好的)。
我可以想到两种解决方法。第一个是返回一个对象或指向Memory的指针。但是,在得到结果后,您仍然可以根据返回类型来分叉代码。
在您的情况下,您实际上描述了异常的典型用例。如果其中一个参数低于零,则抛出异常。你可以用try-catch构造在main中捕获你的异常并从那里继续。