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时只是捏住它,但不要在生产代码中这样做。