函数的参数太少,不能用作函数----以 C 开头

发布于 2024-11-07 21:36:23 字数 1963 浏览 0 评论 0原文

你好,我是一名初学者,我有一份初级 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

风吹过旳痕迹 2024-11-14 21:36:23

错误非常明显,您没有按照应有的方式调用该函数。该函数有 4 个参数,而您只传递一个。

但这只是你的第一个错误。第二,现在声明的函数参数将生成参数的本地副本:

double convertTemp (double tempF, double tempR, double tempC, double tempK);

这意味着在函数体内,任何这些变量的更改都不会传播到 main 中声明的变量您曾经调用convertTemp()。我的意思是,在调用函数时,会在堆栈上创建另外 4 个变量,并且它们的值是从发送到函数的变量中复制的。

有两种方法可以解决这个问题:

  • 第一种,如果您对指针一无所知,那么理解起来会稍微复杂一些。在这种方法中,为了修改 main 的原始变量,您需要更改函数签名以接收内存指针:

    void ConvertTemp(double* tempF, double* tempR, double* tempC, double* tempK);

并且函数体也需要更改,以便与文件开头声明的原型保持一致:

void convertTemp (double* tempF, double* tempR, double* tempC, double* tempK)
{
       //Statements
       *tempR = (*tempF - 32) + 491.67;
       *tempC = (*tempF - 32) * 100/180;
       *tempK = *tempC + 273.16;
}

请注意,新函数签名不返回任何值(即void)。这不是必需的,因为您将直接对 main() 传递的变量进行操作。

main() 上,您应该调用如下函数:

fahrenheit = obtainTemp();
convertTemp(&fahrenheit, &rankine, &celsius, &kelvin);
  • 第二种方法,因为您是初学者,这可能会更容易理解,就是声明3 个函数,每个转换需要执行一个函数:

double convertR(double value)
{
  return (value - 32) + 491.67;
}

double convertC(double value)
{
  return (value - 32) * 100/180;
}

double convertK(double value)
{
  return value + 273.16;
}

然后在 main() 上,您可以像这样调用它们:

fahrenheit = obtainTemp();
rankine = convertR(fahrenheit);
celsius = convertC(fahrenheit);
kelvin = convertK(fahrenheit);

printResult(fahrenheit, rankine, celsius, kelvin);

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:

double convertTemp (double tempF, double tempR, double tempC, double tempK);

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:

void convertTemp (double* tempF, double* tempR, double* tempC, double* tempK)
{
       //Statements
       *tempR = (*tempF - 32) + 491.67;
       *tempC = (*tempF - 32) * 100/180;
       *tempK = *tempC + 273.16;
}

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:

fahrenheit = obtainTemp();
convertTemp(&fahrenheit, &rankine, &celsius, &kelvin);
  • The second approach, since you are a beginner this is probably going to be easier for you to understand, is to declare 3 functions, one for each conversion you need to do:

double convertR(double value)
{
  return (value - 32) + 491.67;
}

double convertC(double value)
{
  return (value - 32) * 100/180;
}

double convertK(double value)
{
  return value + 273.16;
}

Then on main(), you would call them like:

fahrenheit = obtainTemp();
rankine = convertR(fahrenheit);
celsius = convertC(fahrenheit);
kelvin = convertK(fahrenheit);

printResult(fahrenheit, rankine, celsius, kelvin);
鱼窥荷 2024-11-14 21:36:23

在 C 中,您必须将参数数量与函数声明相匹配。如果您想在函数中支持可变数量的参数,请使用 stdarg
所以你的编译器告诉你:

rankine = convertTemp(tempR);

没有 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:

rankine = convertTemp(tempR);

Does not have 4 arguments, but your declaration does.

柏林苍穹下 2024-11-14 21:36:23

您必须传入函数所需的参数数量。 convertTemp 需要 4 个参数:tempFtempRtempCtempK。您在调用 convertTemp 时仅传入一个参数。

您可能需要编写三个版本的 convertTempconvertFahrenheitToRankineconvertFahrenheitToCelsiusconvertFahrenheitToKelvin。这些函数中的每一个都应该采用一个双参数,即华氏温度作为输入,并且每个函数都应该输出从华氏温度到它所转换的单位类型的转换。

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 to convertTemp.

Chances are you need to write three versions of convertTemp. convertFahrenheitToRankine, convertFahrenheitToCelsius, and convertFahrenheitToKelvin. 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.

往日情怀 2024-11-14 21:36:23

下面这个函数太少了
论点,

你告诉编译器这里需要四个参数

double convertTemp (double tempF, double tempR, double tempC, double tempK);

,但你在这里只传递一个参数。

rankine = convertTemp (tempR);
celsius = convertTemp (tempC);
kelvin = convertTemp (tempK);

我建议你注释掉大部分代码,并初始化你的双打,就像这样。

#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 = 0.0;
    double tempR = 0.0;
    double tempC = 0.0;
    double tempK = 0.0;
//    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 %f degrees fahrenheit\n", tempF);
     printf("The value of %f in rankine is %f\n", tempF, tempR);
     printf("The value of %f in celsius is %f\n", tempF, tempC);
     printf("The value of %f in kelvin is %f\n", tempF, tempK);
     return;
}

这应该编译时带有关于未使用变量的最少警告。接下来,取消注释并更正最简单的事情,然后是下一个最简单的事情,依此类推。尝试在没有警告的情况下编译。

This function below has too few
arguments,

You're telling the compiler it takes four arguments here

double convertTemp (double tempF, double tempR, double tempC, double tempK);

But you're only passing one here.

rankine = convertTemp (tempR);
celsius = convertTemp (tempC);
kelvin = convertTemp (tempK);

I suggest you comment out most of your code, and initialize your doubles, like this.

#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 = 0.0;
    double tempR = 0.0;
    double tempC = 0.0;
    double tempK = 0.0;
//    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 %f degrees fahrenheit\n", tempF);
     printf("The value of %f in rankine is %f\n", tempF, tempR);
     printf("The value of %f in celsius is %f\n", tempF, tempC);
     printf("The value of %f in kelvin is %f\n", tempF, tempK);
     return;
}

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.

冷心人i 2024-11-14 21:36:23

您需要使用主函数中的 4 个参数(而不是一个)调用 convertTemp。我想..但我不确定你想同时返回所有 3 个值。如果是这样,您必须重新定义函数以使用指针而不是固定值。

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 0; // return 0 for ok? in your function declaration you said it to be and double instead of a int
}

那么你需要从 main 中调用它们,如下所示:

//Calling the functions
fahrenheit = obtainTemp ();
if (convertTemp (fahrenheit, &tempR, &tempC,&tempK) == 0) {
    printResult (fahrenheit, tempR, tempC, tempK);
}

通过变量前面的 & 运算符,我们告诉编译器给出函数的内存地址,而不是变量本身的值。现在函数有了地址,它可以取消引用指针(内存地址),这样它就可以更改主函数中变量的内容:)

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.

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 0; // return 0 for ok? in your function declaration you said it to be and double instead of a int
}

then you need to call them from you main like:

//Calling the functions
fahrenheit = obtainTemp ();
if (convertTemp (fahrenheit, &tempR, &tempC,&tempK) == 0) {
    printResult (fahrenheit, tempR, tempC, tempK);
}

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 can dereference the pointers (memory addresses) so it can change the content of the variables in the main function :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文