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

时间:2015-07-22 10:01:58

标签: c macos function argument-passing function-calls

我正在研究教科书中的一个问题而且我需要制作一个三角形角度计算器我以前习惯于Java但我不是100%在C上,我不理解其中的逻辑。

createData()

我不知道该怎么做。

3 个答案:

答案 0 :(得分:1)

在你的功能定义中

float remainingAngle(float answer)

函数remainingAngle()接受一个参数。

OTOH,在你的函数调用中

remainingAngle(angleA,angleB);

你传递了两个论点。

提供的参数编号和类型应与函数定义中的参数列表匹配。

那就是说,你的代码错了。

  • 第1点。您的本地变量 shadow 全局变量。也许这不是你想要的。变化

    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;
}

然而,这使得全局变量无用。

答案 1 :(得分:0)

除了Souravs的回答,您还可以执行以下操作:

float remainingAngle(float angA, float angB)
{
    float answer = angA + angB;
    return answer;
}

所以你的电话会保持不变。

从逻辑方面来说,你所做的是:

您将两个参数(angleA的值和angleB的值)传递给函数remainingAngle。在那里进行计算并返回结果(answer)。

答案 2 :(得分:0)

你的功能设计不好:

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方面根本不同。