Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 函数调用的参数太多,我该怎么办?_C_Macos_Function_Argument Passing_Function Calls - Fatal编程技术网

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

C 函数调用的参数太多,我该怎么办?,c,macos,function,argument-passing,function-calls,C,Macos,Function,Argument Passing,Function Calls,我正在研究教科书中的一个问题,我需要制作一个三角形角度计算器,我习惯于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 TOU

我正在研究教科书中的一个问题,我需要制作一个三角形角度计算器,我习惯于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;

第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。在这里您进行计算并返回结果答案。

您的函数设计不好:

static float angleB;
static float angleA;

float remainingAngle(float answer)
{
    float answer= angleA+angleB;
//redefinition of answer
 return 0;
}
我该怎么办

答案没有意义;答案是你想要得到什么。为答案留出空间也没有意义。anser是一个浮点,一个标量变量。把它传过去。删除答案参数。 您将答案重新定义为局部变量。删除相同名称的参数后,重新定义就消失了。但在这种情况下,您应该返回答案,而不是0。您甚至可以不使用中间变量answer并返回结果表达式。So:返回所需的表达式 答案取决于两个全局变量。函数应该在作为参数传递的两个角度上工作。为函数提供两个角度参数并删除全局变量。 最后,三角形中三个角的总和是180°,所以剩余角的计算是错误的。 综上所述:

float remainingAngle(float a, float b)
{
    return 180.0f - a - b;
}
这样称呼它:

float angleC = remainingAngle(angleA, angleB);
我习惯了java


我对Java不太熟悉,但我不认为像这样的标量函数在C和Java中有根本不同。

我该怎么做?->提供正确数量的参数。Period.remainingAngle而非printf的参数太多。关于此类线:“float angle a=30.0;”变量“angela”声明为float,因此初始化值也需要声明为float;建议:“浮动角度A=30.0f;”注意后面的“f”。发布的代码使用的是“double”初始值设定项,当初始值设定项中的小数点为double时,默认使用该初始值设定项,除非通过尾随的“f”明确声明您是对的,但在这种情况下,angleA和angleB是全局的,不需要将其作为参数传递:-我知道,我只是这样写的,以防变量不是全局变量。然后他也知道发生了什么。我想我明白了,我接受了你的建议,去掉了静态浮点数,把返回函数改为180,这样回答,角度与a+b的增加成反比
float angleC = remainingAngle(angleA, angleB);