C复数和printf

如何打印(与printf)复数? 例如,如果我有这个代码:

#include <stdio.h> #include <complex.h> int main(void) { double complex dc1 = 3 + 2*I; double complex dc2 = 4 + 5*I; double complex result; result = dc1 + dc2; printf(" ??? \n", result); return 0; } 

..应该使用什么转换说明符(或别的东西),而不是“???”

 printf("%f + i%f\n", creal(result), cimag(result)); 

我不相信C99复杂types有一个特定的格式说明符。

%+f为虚部select正确的符号:

 printf("%f%+fi\n", crealf(I), cimagf(I)); 

输出:

 0.000000+1.000000i 

请注意, i是在结束。

因为复数在内存中是以两个实数连续的方式存储的

 printf("%g + i%g\n", result); 

也可以工作,但是由于参数的types和数量与格式不匹配,所以会生成带有gcc的编译器警告。 我在debugging时只是捏住它,但不要在生产代码中这样做。