函数调用的参数太多,我该怎么办?
Too many arguments to function call, What do I do?
我正在解决教科书上的一个问题,我需要制作一个三角形角度计算器,我已经习惯了 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 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;
至
angleA = 30.0;
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
。在那里你进行计算和 return 结果 (answer
).
你的函数设计的不好:
static float angleB;
static float angleA;
float remainingAngle(float answer)
{
float answer= angleA+angleB;
//redefinition of answer
return 0;
}
What do I do?
- 传递答案没有意义;答案是你想要收到的。 (传递 "space" 作为答案也没有意义。anser 是一个
float
,一个标量变量。只需传递它即可。) 删除 answer
参数。
- 您将
answer
重新定义为局部变量。删除同名参数后,重新定义就消失了。但在那种情况下,你应该 return answer
而不是 0
。您甚至可以不使用中间变量 answer
和 return 结果表达式。所以:Return 所需的表达式
- 答案取决于两个全局变量。该函数应该在您作为参数传递的两个角度上工作。 为您的函数提供两个角度参数并删除全局变量。
- 最后,三角形的三个内角和是180°,所以你的余角计算是错误的。
将所有这些放在一起:
float remainingAngle(float a, float b)
{
return 180.0f - a - b;
}
并这样称呼它:
float angleC = remainingAngle(angleA, angleB);
Im used to java
我不太熟悉 Java,但我不认为像这样的标量函数在 C 和 Java 中有根本的不同。
我正在解决教科书上的一个问题,我需要制作一个三角形角度计算器,我已经习惯了 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 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;
至
angleA = 30.0; 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
。在那里你进行计算和 return 结果 (answer
).
你的函数设计的不好:
static float angleB;
static float angleA;
float remainingAngle(float answer)
{
float answer= angleA+angleB;
//redefinition of answer
return 0;
}
What do I do?
- 传递答案没有意义;答案是你想要收到的。 (传递 "space" 作为答案也没有意义。anser 是一个
float
,一个标量变量。只需传递它即可。) 删除answer
参数。 - 您将
answer
重新定义为局部变量。删除同名参数后,重新定义就消失了。但在那种情况下,你应该 returnanswer
而不是0
。您甚至可以不使用中间变量answer
和 return 结果表达式。所以:Return 所需的表达式 - 答案取决于两个全局变量。该函数应该在您作为参数传递的两个角度上工作。 为您的函数提供两个角度参数并删除全局变量。
- 最后,三角形的三个内角和是180°,所以你的余角计算是错误的。
将所有这些放在一起:
float remainingAngle(float a, float b)
{
return 180.0f - a - b;
}
并这样称呼它:
float angleC = remainingAngle(angleA, angleB);
Im used to java
我不太熟悉 Java,但我不认为像这样的标量函数在 C 和 Java 中有根本的不同。