函数调用的参数太多,我该怎么办?
Posted
技术标签:
【中文标题】函数调用的参数太多,我该怎么办?【英文标题】:Too many arguments to function call, What do I do? 【发布时间】:2015-10-12 03:20:46 【问题描述】:我正在解决我教科书中的一个问题,我需要制作一个三角形角度计算器,我习惯了 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
我不知道在这里做什么。
【问题讨论】:
What do I do?
--> 提供正确数量的参数。期间。
剩余角度的参数太多,而不是 printf。
关于这种线:'float angleA = 30.0;'变量'angleA'声明为float,所以初始化值也需要声明为float;建议:'浮角A = 30.0f;'注意尾随的“f”。发布的代码使用“双”初始化程序(初始化程序中的小数点为双精度时的默认设置,除非通过尾随“f”特别声明)
【参考方案1】:
在你的函数定义中
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;
但是,这会使全局变量无用。
【讨论】:
【参考方案2】:除了 Souravs 的回答,您还可以执行以下操作:
float remainingAngle(float angA, float angB)
float answer = angA + angB;
return answer;
因此您的通话将保持不变。
从逻辑上讲,你要做的是:
您将两个参数(angleA
的值和angleB
的值)传递给函数remainingAngle
。您在那里进行计算并返回结果 (answer
)。
【讨论】:
你是对的,但在这种情况下,angleA
和angleB
是全局的,不需要作为参数传递。 :-)
我知道,我只是这样写,以防变量不是全局的。然后他也知道是怎么回事了。
我想我明白了,我接受了你的建议,移除了静态浮点数,并将返回函数更改为“180-answer”,这样角度与 a+b 的增加成反比” 【参考方案3】:
你的函数设计不好:
static float angleB;
static float angleA;
float remainingAngle(float answer)
float answer= angleA+angleB;
//redefinition of answer
return 0;
回答没有意义;答案是你想要收到的。 (也没有必要为答案传递“空格”。分析器是我该怎么办?
float
,一个标量变量。只需传递它。)删除 answer
参数。
您将answer
重新定义为局部变量。删除同名参数后,重新定义就消失了。但在这种情况下,您应该返回 answer
而不是 0
。您甚至可以不使用中间变量 answer
并返回结果表达式。所以:返回所需的表达式
答案取决于两个全局变量。该函数应该在您作为参数传递的两个角度上工作。 为您的函数提供两个角度参数并删除全局变量。
最后,三角形中三个角的和是 180°,所以你的剩余角计算是错误的。
将所有这些放在一起:
float remainingAngle(float a, float b)
return 180.0f - a - b;
然后这样称呼它:
float angleC = remainingAngle(angleA, angleB);
我习惯了java
我对 Java 不太熟悉,但我认为像这样的标量上的函数在 C 和 Java 中没有根本的不同。
【讨论】:
以上是关于函数调用的参数太多,我该怎么办?的主要内容,如果未能解决你的问题,请参考以下文章