函数调用的参数太多,我该怎么办?

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)。

【讨论】:

你是对的,但在这种情况下,angleAangleB 是全局的,不需要作为参数传递。 :-) 我知道,我只是这样写,以防变量不是全局的。然后他也知道是怎么回事了。 我想我明白了,我接受了你的建议,移除了静态浮点数,并将返回函数更改为“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 中没有根本的不同。

【讨论】:

以上是关于函数调用的参数太多,我该怎么办?的主要内容,如果未能解决你的问题,请参考以下文章

传递参数而不调用函数

请教Inno Setup,带多个参数的函数调用问题

JS回调函数怎么写的?

delphi如何调用多个参数的函数

c语言怎么写重载函数?

CAD LISP编译成VXL时提示错误参数太多 怎么解决