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

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 中有根本的不同。