【问题标题】:How to return string from a char function如何从char函数返回字符串
【发布时间】:2010-12-23 08:00:17
【问题描述】:

我希望函数 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);
 }

【问题讨论】:

  • 似乎是与stackoverflow.com/questions/1847690 相关的后续问题,这必须是家庭作业...
  • height=height*0.01; 顺便说一句,这就是 Apps Hungarian 表示法的用途,正如 Joel Spolsky 所倡导的那样。 mheight = cmHeight * 0.01; 没有评论是有意义的。
  • 这是同一用户再次提出完全相同的问题:stackoverflow.com/questions/1847690/…。由于这是较新的,请考虑关闭。

标签: c string function char return


【解决方案1】:

将返回类型更改为char *,然后返回指向您的各种类别字符串的指针。 您还需要填写各种 bmi 级别的检查。

看起来很像家庭作业;如果是,请标记它。

这是我的解决方案...但我已经随机化了行的顺序,因为您确实需要自己做作业。不过这里应该有一些提示,例如structreturn 行。

    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;

【讨论】:

  • 但是很难得到你所做的事情
  • 是的,是的,但我想让自己更容易解决,而不是对我的答案进行逆向工程。高级概述:我计算了 BMI,遍历包含 BMI 值和类别名称的结构数组,并返回一个指向名称的指针。但是你需要从你的返回类型开始。
  • +1 因为提问者忘记了,因为这是一个比我在原始问题(完全相同!)Gaurav 之前问的更漂亮的答案:stackoverflow.com/questions/1847690/…
【解决方案2】:

我没有看到你的问题。您不能根据参数更改返回类型。要么总是返回 char 类型,要么总是返回一个字符串。这是一个语言限制(我会说一个很好的限制)。

我可以想到两种解决方法。第一个是返回一个对象或指向内存的指针。但是,在获得结果后,您仍然需要根据返回类型来分叉代码。

在您的情况下,您实际上描述了异常的典型用例。如果任一参数小于零,则抛出异常。您可以使用 try-catch 构造在 main 中捕获异常并从那里继续。

【讨论】:

  • 从嵌入的注释中可以清楚地看出,他需要对赋值进行的更改之一就是更改返回类型。
  • 好的,将返回类型更改为有用的东西会使整个任务变得更容易。 :)
猜你喜欢
  • 2015-05-11
  • 2015-01-02
  • 2021-12-26
  • 2022-10-14
  • 1970-01-01
  • 2016-11-17
  • 1970-01-01
  • 2020-02-21
相关资源
最近更新 更多