函数参数数据类型错误

时间:2016-03-24 08:35:47

标签: c function

我写了一个函数equlibrium,它接受两个输入a(double)和i(int)。返回输出fEq。根据代码,函数应该在从主体调用时在屏幕上打印fEq的值。但我没有在屏幕上输出。该函数真的被调用了吗?或者在使用参数调用时是否存在数据类型错误?请帮我。

  #include <stdio.h>
  #include <stdlib.h>
  #include <math.h>
  #include <time.h>
  #include <sys/stat.h>
  #include <string.h>
  #include <dirent.h>

  // define global variables

  double w[3]= {2.0/3.0, 1.0/6.0, 1.0/6.0};
  int nx=100;
  int x, i;
  double u[100],u0[100];
  double fn[100][3];
  double fEq,a;

 //define function prototypes

 equlibrium (double a,int i, double fEq);

 // main program

 int main(int argc, char **argv)
 {
    u[0]  = 1.0e0;
    u[nx] = 1.0e0;   
    i=0;
    a = u[x];
    equlibrium (a, i, fEq);
 }

 //function equlibrium

 equlibrium (double a,int i, double fEq) 
 {
    if(i=0)
    {
       fEq = (w[0]-1.0) * a;
       printf("%lf\n", fEq);
    }
    else if(i=1)
    {
       fEq = (w[1] * a);
    }
    else
    {
       fEq = (w[2] * a);
    }
    return fEq;
}

2 个答案:

答案 0 :(得分:2)

许多问题:

  1. 如果使用==
  2. 在您的案例double
  3. 中,函数必须具有类型或存储类

    更正您的代码:

      #include <stdio.h>
      #include <stdlib.h>
      #include <math.h>
      #include <time.h>
      #include <sys/stat.h>
      #include <string.h>
      #include <dirent.h>
    
      // define global variables
    
      double w[3]= {2.0/3.0, 1.0/6.0, 1.0/6.0};
      int nx=99;
      int x, i;
      double u[100],u0[100];
      double fn[100][3];
      double fEq,a;
    
     //define function prototypes
    
      double equlibrium (double a,int i, double fEq);
    
     // main program
    
     int main(int argc, char **argv)
     {
        u[0]  = 1.0e0;
        u[nx] = 1.0e0;
        i=0;
        x=0;
        a = u[x];
        fEq = equlibrium (a, i, fEq);
    
        printf("%f\n", fEq);
    
        return 0;
     }
    
     //function equlibrium
    
     double equlibrium (double a,int i, double fEq)
     {
        if(i==0)
        {
           fEq = (w[0]-1.0) * a;
           printf("%lf\n", fEq);
        }
        else if(i==1)
        {
           fEq = (w[1] * a);
        }
        else
        {
           fEq = (w[2] * a);
        }
        return fEq;
    }
    

答案 1 :(得分:2)

  1. 您的功能原型是
  2. equlibrium (double a,int i, double fEq);

    但它需要一种类型。因此,只要它返回双精度值fEq,就添加double作为返回类型。

    double equlibrium (double a,int i, double fEq);

    1. 同样,更改函数体,使其具有类型:

      double equlibrium (double a,int i, double fEq) 
      {
          ...
          return fEq;
      }
      
    2. 您的if语句需要==符号而不是=才能进行比较。使用=,您只需指定一个值,而不是比较。

    3. 在不需要时使用全局变量不是一个好习惯。最好使用局部变量并通过引用函数传递它们,以便它可以处理它们。