2013-02-27 48 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; 
}