注意:原始问题已被多次更改,代码也经常更改,在每次迭代中引入新错误。我留下这个答案,因为它回答了原始代码,请参阅历史。在这个答案下面有一个更新提供建议而不是代码,因为这在这里似乎更合适。
嗯,旁观者删除了他的答案。但也许这就是你应该拥有的:*
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”,并且不要为无效的情况使用特殊值。相反,您要求 return "invalid"
,我理解为返回值为“invalid”的字符串(它本身仍然返回一个特殊值)。
你做不到
简而言之:你不能那样做。当前函数具有返回类型char
。我不知道你的函数的目的,但我相信你已经考虑过了,并且有理由使用char
. 一个 char 只能包含一个字符。而“无效”一词是多个字符。您有几个选项,选择最适合您的选项:
其他方法
- 将返回类型更改
string
为char
,这需要重新设计所有涉及的代码;
- 通过返回一个特殊值来解决。您不显示函数的主体,但如果它通常永远不会返回
\0
,您可以使用该值,如我上面的示例所示。当然,您可以选择任何其他 char 值;
- 引发异常并在正文中使用 try/catch。但是你使用 C,而不是 C++。这是一个链接,描述了对 C 使用 C++ 样式的异常处理,但这可能有点越界,学习 C 最好在当时迈出一小步。
什么是通常的最佳实践
在正常情况下,通常选择特殊情况值(通常在较旧或更基本的语言中,如 C 或汇编程序)或异常值(通常用于更结构化的语言,如 C++、Java、Python)。出于特殊情况(如无效输入)的目的而更改完整函数通常被认为是不好的做法。
为什么
相反,函数的调用者应该处理这些特殊情况。这样做的原因是编程中的一条非常重要的规则:函数永远无法事先知道该函数的用户在发生坏事(非法输入)时想要做什么。一个人可能会选择打印“非法输入”(对于命令行用户),另一个人想要退出程序(对于在库中),而另一个人想要忽略并且什么也不做(对于自动处理)。简而言之:您想要实现的目标,您应该尝试以不同的方式实现(参见上面的选项 2 和 3,以及我的原始解决方案)。
教师和教科书
到目前为止,对于任何(未来的)同事来说,使用这种方法是最容易理解的,也是最容易理解的,因为它遵循常见的计算机实践。当然,我没有看过你的作业或教科书,所以我不知道他们想要解决的方向是什么,也不会是第一个教你走错路的教科书或老师,让你颤抖,然后告诉你正确的道路。