50

如何打印(使用 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;
}

..我应该使用什么转换说明符(或其他东西)来代替“???”

4

4 回答 4

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

我不相信 C99 复杂类型有特定的格式说明符。

于 2010-11-04T17:33:40.357 回答
18

让我们%+f为虚部选择正确的符号:

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

输出:

0.000000+1.000000i

请注意,i在最后。

于 2016-11-05T15:06:29.003 回答
-1

因为复数作为两个实数在内存中背靠背存储,所以

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

也可以,但会使用 gcc 生成编译器警告,因为参数的类型和数量与格式不匹配。我在调试时会在紧要关头这样做,但不要在生产代码中这样做。

于 2012-11-22T19:59:11.007 回答
-3

使用 GNU C,这有效:

printf("%f %f\n", complexnum);

或者,如果您想在虚部之后打印“i”后缀:

printf("%f %fi\n", complexnum);
于 2019-01-24T17:03:08.237 回答