C复数和printf

gam*_*boy 46 c printf complex-numbers

如何打印(带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;
}
Run Code Online (Sandbox Code Playgroud)

..我应该使用什么转换说明符(或其他东西)"???"

Joh*_*eek 55

printf("%f + i%f\n", creal(result), cimag(result));
Run Code Online (Sandbox Code Playgroud)

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

  • 额外的改进 - 对虚部的符号作出反应的宏:`#define printfc(c)printf("%f%c%fi",creal(c),(cimag(c)> = 0.0f)?'+': '\ 0',cimag(c)中)` (5认同)
  • @JonDoe没关系。printf不是scanf,f和lf都可以加倍。参见http://stackoverflow.com/questions/210590/why-does-scanf-need-lf-for-doubles-when-printf-is-okay-with-just-f (2认同)

lev*_*vif 14

让我们%+f选择正确的符号作为想象部分:

printf("%f%+fi\n", crealf(I), cimagf(I));
Run Code Online (Sandbox Code Playgroud)

输出:

0.000000+1.000000i
Run Code Online (Sandbox Code Playgroud)

请注意,i最后.