我希望函数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);
}
答案 0 :(得分:2)
注意: 原始问题已被多次更改,代码也经常更改,在每次迭代中引入新错误。我留下这个答案,因为它回答了原始代码,见历史。在这个答案下面有一个更新提供建议而不是代码,因为这似乎更合适。
嗯,旁观者取消了他的回答。但也许这就是你应该拥有的:*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,以及我原来的解决方案)。
对于任何(未来)同事来说,使用这种方法是最简单的,也是最好的理解,因为它遵循常见的计算机实践。当然,我还没有看到你的任务或教科书,所以我不知道他们想要一个解决方案的方向,它不会是第一个向你展示错误路径的教科书或老师,让你颤抖,然后告诉你正确的道路。
答案 1 :(得分:1)
getCategory方法并不总是返回(因为if语句)。另外,不确定if语句中的高度。在方法结束时添加另一个返回无效。
char getCategory(float height,float weight)
{
char invalid;
if(height<=0 || weight<=0)
return invalid;
return 0
}
答案 2 :(得分:0)
你需要(非常仔细地)查阅你的教科书,以确定上述代码中的大量错误 1,你在getCategory中的测试几乎肯定不会做你想做的事 2,你在某些情况下返回无效(但不是全部,见#1)。但是,没有办法知道无效没有已知值 3.在其他情况下,getCategory根本不返回任何值
答案 3 :(得分:0)
您正在定义名为invalid
的变量。其内容未定义(可能是-128到127之间的任何内容)。当你返回这个变量时,你会返回任何东西;你想在返回之前给invalid
变量赋值吗? e.g。
char invalid;
invalid = 'i';
if ( ... ) {
return invalid;
} else {
return 0;
}
答案 4 :(得分:0)
应该将无效映射到什么?你应该有这样的约定:
char invalid_category = '?';
或者也许:
#define INVALID_CATEGORY '?'
这在getCategory函数之外更好地定义,以便调用代码可以访问它。
当有效参数传递给它时,你的代码返回的内容也不明显。
答案 5 :(得分:0)
顺便说一句,在您的函数 getCategory 中,您有一个未使用也未声明的变量 - starvation
。它来自哪里?我怀疑这是一个全局变量。
此外,变量bmirange
没有意义也不会编译
bmirange=[weight/(height*height)];
正如您所看到的那样,左手边表达式(LHS),但您在表达式(RHS)的右侧使用了数组下标运算符。这是一个非法的声明!
你的意图是什么?那意味着是一对括号吗?
你能证实吗?
许多答案令人困惑,因为OP没有明确指出错误是什么,也没有解释正在发生什么导致其他人最终发布不满足OP的代码。< / p>
希望这有帮助, 最好的祝福, 汤姆。