2016-03-24 206 views
1

我写了一个函数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

所有如果必须使用'=='。例如'if(i == 0)'。 – LPs

+4

您的代码存在几个问题,如果您在编译器中启用警告(并对它们采取行动!),则会发现大多数问题。 –

+1

你用什么IDE来建立你的代码?如果你还没有一个,现在可以得到一个(NetBeans,Eclipse,CodeBlocks,MS Visual Studio等,都是免费的)。 IDE将允许您使用调试器;你可以在一行代码上设置一个断点,运行到该断点,检查变量的值,并逐行检查你的代码,看看它是如何执行的。这是解决所有这些问题的标准方法,而不仅仅是这个问题。 – Mawg

回答

2

许多问题:

  1. 如果使用==
  2. 功能必须有一个类型或存储类,你的情况double

纠正代码:

#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; 
} 
2
  1. 你的函数的原型是

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

,但它需要一个类型。所以,只要它返回双值fEq,请将double作为返回类型。

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

  • 类似地,改变你的函数的主体,使得其具有类型:

    double equlibrium (double a,int i, double fEq) 
    { 
        ... 
        return fEq; 
    } 
    
  • if语句需要一个==符号代替的=为了比较。通过使用=您只需分配一个值,而不是比较。

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

  • +0

    我改变了它,包括双原型和身体。我也根据建议更改了if语句。但为了检查调用,我在函数体内添加了printf语句。它成功编译,但它不是printing.My语句是printf(“%lf \ t%d \ t%lf \ n”,a,i,fEq); – user3773860