2013-02-27 32 views
0

我要總結X複數,可變數目但是這個代碼返回我:和複數用的參數

-9.3e + 61 + -1.9e + 062i

typedef struct complex{ 
    double real; 
    double imag; 
} complex; 

complex sum(int length, ...) 
{ 
    va_list param; 
    va_start(param, length); 

    complex out = {0, 0}; 
    for(int i = 0;i<length;i++) 
    { 
     out.real += va_arg(param, complex).real; 
     out.imag += va_arg(param, complex).imag; 
    } 
    va_end(param); 
    return out; 
} 

當我引用real/imag部分時,它會返回正確/成像結果。

主:

int main() 
{ 
    complex result; 
    complex a = {3.1,-2.3}; 
    complex b = {0.5,-3}; 
    complex c = {0,1.2}; 

    result = sum(3,a,b,c); 
    printf("Sum is %.2g + %.2gi. \n", result.real, result.imag); 

    return 0; 
} 

我應該改變什麼,使其工作?

+3

你知道,C處已經有[複數](http://en.cppreference.com/w/c/numeric/複雜)? – 2013-02-27 09:40:58

+0

我知道,但我想自己定義它。 – kelly 2013-02-27 09:46:55

+4

問題是,每次調用'va_arg'時,它會取出一個完整的'complex'結構。既然你每循環調用兩次,你就拿出2個不同的'complex'結構,這是不正確的。 您需要緩存結果並稍後訪問成員。 – nhahtdh 2013-02-27 09:48:44

回答

3

問題是,每次打電話給va_arg,它都會取出一個整體complex結構體。既然你每循環調用兩次,你就拿出兩個不同的complex結構,這是不正確的。

需要緩存的結果,後來訪問的成員:

for (int i = 0; i < length; i++) 
{ 
    complex currArg = va_arg(param, complex); 
    out.real += currArg.real; 
    out.imag += currArg.imag; 
}