函数的参数太少,不能用作函数----以 C 开头
你好,我是一名初学者,我有一份初级 C 课的作业。我写的程序不断出现错误,特别是用我的函数编写的程序。这是我的程序:
#include <stdio.h>
//Function Declarations
double obtainTemp (void);
**double convertTemp (double tempF, double tempR, double tempC, double tempK);**
void printResult (double tempF, double tempR, double tempC, double tempK);
int main (void)
{
//Local Declarations
double tempF;
double tempR;
double tempC;
double tempK;
double fahrenheit;
double rankine;
double celsius;
double kelvin;
//Calling the functions
fahrenheit = obtainTemp ();
rankine = convertTemp (tempR);
celsius = convertTemp (tempC);
kelvin = convertTemp (tempK);
//will print it by...
printResult (tempF, tempR, tempC, tempK);
int temp;
printf("Press anything to exit: ");
scanf("%d", &temp);
return 0;
}//main
//============obtainTemp===============
double obtainTemp (void)
{
//Local Declarations
double tempF;
printf("Enter temperature: ");
scanf("%lf", &tempF);
return tempF;
}
//============convertTemp==============
int convertTemp (double tempF, double tempR, double tempC, double tempK);
{
//Statements
tempR = (tempF - 32) + 491.67;
tempC = (tempF - 32) * 100/180;
tempK = tempC + 273.16;
return tempF, tempR, tempC, tempK;
}
//============printResult===============
void printResult (double tempF, double tempR, double tempC, double tempK)
{
//Statements
printf("The temperature is %lf degrees fahrenheit\n", tempF);
printf("The value of %lf in rankine is %lf\n", tempF, tempR);
printf("The value of %lf in celsius is %lf\n", tempF, tempC);
printf("The value of %lf in kelvin is %lf\n", tempF, tempK);
return;
}
下面的这个函数的参数太少,编译器说我不能将它用作函数。为什么哦为什么?
double convertTemp (double tempF, double tempR, double tempC, double tempK);
抱歉,我是初学者...我非常感谢您的帮助:)
Hi i am a beginner, and I have this homework for my beginning C class. I keep getting errors for the program I wrote particularly with my function. Here's my program:
#include <stdio.h>
//Function Declarations
double obtainTemp (void);
**double convertTemp (double tempF, double tempR, double tempC, double tempK);**
void printResult (double tempF, double tempR, double tempC, double tempK);
int main (void)
{
//Local Declarations
double tempF;
double tempR;
double tempC;
double tempK;
double fahrenheit;
double rankine;
double celsius;
double kelvin;
//Calling the functions
fahrenheit = obtainTemp ();
rankine = convertTemp (tempR);
celsius = convertTemp (tempC);
kelvin = convertTemp (tempK);
//will print it by...
printResult (tempF, tempR, tempC, tempK);
int temp;
printf("Press anything to exit: ");
scanf("%d", &temp);
return 0;
}//main
//============obtainTemp===============
double obtainTemp (void)
{
//Local Declarations
double tempF;
printf("Enter temperature: ");
scanf("%lf", &tempF);
return tempF;
}
//============convertTemp==============
int convertTemp (double tempF, double tempR, double tempC, double tempK);
{
//Statements
tempR = (tempF - 32) + 491.67;
tempC = (tempF - 32) * 100/180;
tempK = tempC + 273.16;
return tempF, tempR, tempC, tempK;
}
//============printResult===============
void printResult (double tempF, double tempR, double tempC, double tempK)
{
//Statements
printf("The temperature is %lf degrees fahrenheit\n", tempF);
printf("The value of %lf in rankine is %lf\n", tempF, tempR);
printf("The value of %lf in celsius is %lf\n", tempF, tempC);
printf("The value of %lf in kelvin is %lf\n", tempF, tempK);
return;
}
This function below has too few arguments, and compiler says i can't use it as a function. why oh why?
double convertTemp (double tempF, double tempR, double tempC, double tempK);
Sorry, I am a beginner...i would really appreciate your help :)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
错误非常明显,您没有按照应有的方式调用该函数。该函数有 4 个参数,而您只传递一个。
但这只是你的第一个错误。第二,现在声明的函数参数将生成参数的本地副本:
这意味着在函数体内,任何这些变量的更改都不会传播到 main 中声明的变量您曾经调用
convertTemp()
。我的意思是,在调用函数时,会在堆栈上创建另外 4 个变量,并且它们的值是从发送到函数的变量中复制的。有两种方法可以解决这个问题:
第一种,如果您对指针一无所知,那么理解起来会稍微复杂一些。在这种方法中,为了修改 main 的原始变量,您需要更改函数签名以接收内存指针:
void ConvertTemp(double* tempF, double* tempR, double* tempC, double* tempK);
并且函数体也需要更改,以便与文件开头声明的原型保持一致:
请注意,新函数签名不返回任何值(即void)。这不是必需的,因为您将直接对
main()
传递的变量进行操作。在
main()
上,您应该调用如下函数:然后在
main()
上,您可以像这样调用它们:The error is pretty clear, you're not calling the function the way it's supposed to be. The function takes 4 parameters, and you are only passing one.
But that is only your FIRST mistake. The SECOND, is that the function arguments as they are declared right now, will make a local copy of the parameters:
This means that inside the body of the function, changes on any of these variables will not propagate to the variables declared in main which you used to call
convertTemp()
. What I'm saying is at the time the function is called, another 4 variables are created on the stack and their values are copied from the variables you sent to the function.There are two approaches to solve this problem:
The first, a little more complex to understand if you don't know nothing about pointers. On this approach, in order to modify the original variables of main, you need to change your function signature to receive memory pointers instead:
void convertTemp (double* tempF, double* tempR, double* tempC, double* tempK);
and the body of function needs to change too, in order to be consistent with the prototype declared in the beginning of the file:
Note that the new function signature does not return any value (ie. void). This is not necessary since you will be operating directly on the variables passed by
main()
.On
main()
, you should call the function like:Then on
main()
, you would call them like:在 C 中,您必须将参数数量与函数声明相匹配。如果您想在函数中支持可变数量的参数,请使用 stdarg。
所以你的编译器告诉你:
没有 4 个参数,但你的声明有。
In C you have to match the number of arguments to your function declaration. If you want to support a variable number of arguments in your function, you use stdarg.
So your compiler is telling you that:
Does not have 4 arguments, but your declaration does.
您必须传入函数所需的参数数量。
convertTemp
需要 4 个参数:tempF
、tempR
、tempC
、tempK
。您在调用convertTemp
时仅传入一个参数。您可能需要编写三个版本的
convertTemp
。convertFahrenheitToRankine
、convertFahrenheitToCelsius
和convertFahrenheitToKelvin
。这些函数中的每一个都应该采用一个双参数,即华氏温度作为输入,并且每个函数都应该输出从华氏温度到它所转换的单位类型的转换。You must give pass in the number of arguments that a function requires.
convertTemp
requires 4 arguments,tempF
,tempR
,tempC
,tempK
. You're only passing in one argument in your call toconvertTemp
.Chances are you need to write three versions of
convertTemp
.convertFahrenheitToRankine
,convertFahrenheitToCelsius
, andconvertFahrenheitToKelvin
. Each one of these functions should take one double argument which is a temperature in fahrenheit as an input, and each one should output the conversion from fahrenheit to the unit type for which it converts.你告诉编译器这里需要四个参数
,但你在这里只传递一个参数。
我建议你注释掉大部分代码,并初始化你的双打,就像这样。
这应该编译时带有关于未使用变量的最少警告。接下来,取消注释并更正最简单的事情,然后是下一个最简单的事情,依此类推。尝试在没有警告的情况下编译。
You're telling the compiler it takes four arguments here
But you're only passing one here.
I suggest you comment out most of your code, and initialize your doubles, like this.
That should compile with minimal warnings about unused variables. Next, uncomment and correct the simplest thing, then the next simplest thing, and so on. Try to compile without warnings.
您需要使用主函数中的 4 个参数(而不是一个)调用
convertTemp
。我想..但我不确定你想同时返回所有 3 个值。如果是这样,您必须重新定义函数以使用指针而不是固定值。那么你需要从 main 中调用它们,如下所示:
通过变量前面的
&
运算符,我们告诉编译器给出函数的内存地址,而不是变量本身的值。现在函数有了地址,它可以取消引用
指针(内存地址),这样它就可以更改主函数中变量的内容:)You need to call
convertTemp
with 4 parameters from your main function and not one. I think.. but i'm not sure you want to return all 3 values at the same time. If so you have to redefine your function to use pointers instead of fixed values.then you need to call them from you main like:
With the
&
operator in frond of the variable we tell the compiler to give the memory address of the function and not the value of the variable itself. Now the function has the addresses and it candereference
the pointers (memory addresses) so it can change the content of the variables in the main function :)