C 函数调用的参数太多,我该怎么办?
我正在研究教科书中的一个问题,我需要制作一个三角形角度计算器,我习惯于java,但我还不是100%使用C,我不理解其中的逻辑C 函数调用的参数太多,我该怎么办?,c,macos,function,argument-passing,function-calls,C,Macos,Function,Argument Passing,Function Calls,我正在研究教科书中的一个问题,我需要制作一个三角形角度计算器,我习惯于java,但我还不是100%使用C,我不理解其中的逻辑 #include <stdio.h> static float angleB; static float angleA; float remainingAngle(float answer) { float answer= angleA+angleB; //redefinition of answer return 0; } //CANT TOU
#include <stdio.h>
static float angleB;
static float angleA;
float remainingAngle(float answer)
{
float answer= angleA+angleB;
//redefinition of answer
return 0;
}
//CANT TOUCH FROM HERE TO END
int main(int argc, const char * argv[]) {
float angleA = 30.0;
float angleB = 60.0;
float angleC = remainingAngle(angleA,angleB);
// to many arguments to function call (referring to angleC)
printf("the third angle is %.2f\n",angleC);
return 0;
} //END CANT TOUCH
我不知道在这里做什么。在函数定义中
float remainingAngle(float answer)
函数remainingAngle接受一个参数
OTOH,在你的函数调用中
remainingAngle(angleA,angleB);
你在传递两个论点
提供的参数编号和类型应与函数定义中的参数列表匹配
也就是说,您的代码是错误的
第1点。您的局部变量将覆盖全局变量。也许那不是你想要的。改变
float angleA = 30.0;
float angleB = 60.0;
到
第2点。功能
float remainingAngle(float answer)
{
float answer= angleA+angleB;
//redefinition of answer
return 0;
}
这在逻辑上是错误的。应该是这样
float remainingAngle(void)
{
float answer= angleA+angleB;
return answer;
}
应该被称为
float angleC = remainingAngle();
编辑后:
根据你的要求,你可以这样做
float remainingAngle(float angleA, float angleB)
{
float answer= angleA+angleB;
return answer;
}
但是,这会使全局变量变得无用。除了Souravs答案之外,您还可以执行以下操作:
float remainingAngle(float angA, float angB)
{
float answer = angA + angB;
return answer;
}
所以你的电话会保持不变
在逻辑方面,你要做的是:
将两个参数值angleA和值angleB传递给函数remainingAngle。在这里您进行计算并返回结果答案。您的函数设计不好:
static float angleB;
static float angleA;
float remainingAngle(float answer)
{
float answer= angleA+angleB;
//redefinition of answer
return 0;
}
我该怎么办
答案没有意义;答案是你想要得到什么。为答案留出空间也没有意义。anser是一个浮点,一个标量变量。把它传过去。删除答案参数。
您将答案重新定义为局部变量。删除相同名称的参数后,重新定义就消失了。但在这种情况下,您应该返回答案,而不是0。您甚至可以不使用中间变量answer并返回结果表达式。So:返回所需的表达式
答案取决于两个全局变量。函数应该在作为参数传递的两个角度上工作。为函数提供两个角度参数并删除全局变量。
最后,三角形中三个角的总和是180°,所以剩余角的计算是错误的。
综上所述:
float remainingAngle(float a, float b)
{
return 180.0f - a - b;
}
这样称呼它:
float angleC = remainingAngle(angleA, angleB);
我习惯了java
我对Java不太熟悉,但我不认为像这样的标量函数在C和Java中有根本不同。我该怎么做?->提供正确数量的参数。Period.remainingAngle而非printf的参数太多。关于此类线:“float angle a=30.0;”变量“angela”声明为float,因此初始化值也需要声明为float;建议:“浮动角度A=30.0f;”注意后面的“f”。发布的代码使用的是“double”初始值设定项,当初始值设定项中的小数点为double时,默认使用该初始值设定项,除非通过尾随的“f”明确声明您是对的,但在这种情况下,angleA和angleB是全局的,不需要将其作为参数传递:-我知道,我只是这样写的,以防变量不是全局变量。然后他也知道发生了什么。我想我明白了,我接受了你的建议,去掉了静态浮点数,把返回函数改为180,这样回答,角度与a+b的增加成反比
float angleC = remainingAngle(angleA, angleB);