2016-03-24 162 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