c - 如何从char函数返回字符串

标签 c function char variable-assignment

我希望函数 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;        //1 centimeter = 0.01 meters
        bmirange=[weight/(height*height)];

        if(bmirange< 15 )
            return starvation;
    } 
}

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);
 }

最佳答案

注意:原来的问题被修改了很多很多次,代码也经常修改,每次迭代都会引入新的错误。我留下这个答案,因为它回答了原始代码,请参阅历史。在这个答案下面有一个更新提供建议而不是代码,因为这在这里似乎更合适。
嗯,旁观者删除了他的答案。但也许这就是你应该拥有的:*

char getCategory(float height,float weight)
{
    char invalid = '\0';

    if(height<=0 || weight<=0)
        return invalid;

    return 'c';   /* do something for the valid cases */
}
* 原问题包含 height || weight <= 0变量 invalid 没有值.
代码注释:
通过适当的缩进,您的程序流程变得更加清晰。我更正了你的 if 语句,假设这是你的意图,实际上。最后一行应包含您当前在问题中遗漏的内容。我在第一行添加了一个初始化,因为有一个值比没有一个值更好(这意味着:如果你不初始化,它可以是任何东西,真的)。
在您的调用代码中,您可以执行以下操作:
Category = getCategory(height, weight);
if(Category == 0)
    printf("invalid");
else
    printf("%c", Category);
如果这是您的意图,它实际上会在输出中打印“无效”一词。

更新:根据问题中的新文本,很明显提问者想要别的东西,所以这是一个新的答案。我离开了上面,它仍然适用于原始问题。
您现在要求不要打印单词“invalid”,并且不要为无效的情况使用特殊值。相反,您要求返回 "invalid" ,我理解为返回值为“无效”的字符串(它本身仍然返回一个特殊值)。
你做不到
简而言之:你不能那样做。当前函数的返回类型为 char .我不知道你的函数的目的,但我相信你已经考虑过了,使用 char 是有原因的。 .一个 char 只能包含一个字符。而“无效”一词是多个字符。您有几个选项,选择最适合您的选项:
其他方法
  • 将返回类型更改为 string而不是 char ,这需要重新设计所有涉及的代码;
  • 通过返回一个特殊值来解决。您不显示函数的主体,但如果它通常永远不会返回 \0 ,您可以使用该值,如我上面的示例所示。当然,您可以选择任何其他 char 值;
  • 引发异常并在正文中使用 try/catch。但是你使用 C,而不是 C++。这是 describes using C++-style exception handling for C 的链接, 但这可能有点越界,学习 C 最好在当时迈出一小步。

  • 什么是通常的最佳实践
    在正常情况下,通常选择特殊情况值(通常在较旧或更基本的语言中,如 C 或汇编程序)或异常值(通常用于更结构化的语言,如 C++、Java、Python)。出于特殊情况(如无效输入)的目的而更改完整函数通常被认为是不好的做法。
    为什么
    相反,函数的调用者应该处理这些特殊情况。这样做的原因是编程中的一条非常重要的规则:函数永远无法事先知道该函数的用户在发生坏事(非法输入)时想要做什么。一个人可能会选择打印“非法输入”(对于命令行用户),另一个人想要退出程序(对于在库中),而另一个人想要忽略并且什么也不做(对于自动处理)。简而言之:您想要实现的目标,您应该尝试以不同的方式实现(参见上面的选项 2 和 3,以及我的原始解决方案)。
    教师和教科书
    到目前为止,对于任何( future 的)同事来说,使用这种方法是最容易理解的,也是最容易理解的,因为它遵循常见的计算机实践。当然,我没有看过你的作业或教科书,所以我不知道他们想要解决的方向是什么,也不会是第一个教你走错路的教科书或老师,让你颤抖,然后告诉你正确的道路。

    关于c - 如何从char函数返回字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1847690/

    相关文章:

    c - 使用系统调用时文件中的垃圾值

    用数组调用函数?

    javascript - 如何使用 Javascript 从浏览器获取电池百分比?

    php - 如何使用 32 位机器在 PHP 中打印 40 位数字

    c - execlp命令中 "lp"代表什么

    c - 使用 argc 和 argv[] 构建一个 tail 程序

    python - 我应该将正在测试的函数包含在unittest文件中,还是应该将其导入unittest文件中?

    c++ - 辅音计数程序不返回辅音数

    java - 如何随机显示给定单词中的单个字符

    objective-c - 如何获取二维数组中的char数组元素