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