![](/img/trans.png)
[英]Concatenate text with numbers in a function with variable number of parameters
[英]sum complex numbers in function with a variable number of parameters
我想对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 part时,它将返回正确的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;
}
我应该进行哪些更改才能使其正常工作?
问题在于,每次调用va_arg
,它将取出一个完整的complex
结构。 由于每个循环调用两次,因此取出2个不同的complex
结构,这是不正确的。
您需要缓存结果并稍后访问成员:
for (int i = 0; i < length; i++)
{
complex currArg = va_arg(param, complex);
out.real += currArg.real;
out.imag += currArg.imag;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.