C - (Printf)强制显示零

时间:2011-08-11 18:39:24

标签: c matrix printf

我有:

void pprint_matrix(matrix *m)
{
    int n,k,p;
    matrix* row = new_matrix(1,m->j);

    for (k = 1; k < (m->i)+1; k++)
    {
        p = 0;
        for (n = (m->j)*k-(m->j); n < (m->j)*k; n++)
        {
            row->m[p] = m->m[n];
            p++;
        }
        for (n = 0; n < m->j; n++)
        {
            printf("(%+#3.3g%+#3.3gi)  ",row->m[n].re,row->m[n].im);
        }
        printf("\n");
    }
}

哪个是打印:

(-1.73+0.00i)  (+0.866+0.00i)  (-0.722+0.00i)  (-0.866+0.00i)  
(+0.00+0.00i)  (-0.707+0.00i)  (+0.707+0.00i)  (+0.707+0.00i)  
(+0.00+0.00i)  (+0.00+0.00i)  (+0.204+0.00i)  (+0.00+0.00i) 

打印输出的另一个例子:

(-2.24+0.00i)  (+2.22e-16+0.00i)  (-1.12+0.00i)  (-1.79+0.00i)  
(+0.00+0.00i)  (+1.58+0.00i)  (+0.00+0.00i)  (+0.632+0.00i)  
(+0.00+0.00i)  (+5.55e-17+0.00i)  (-0.725+0.00i)  (-1.04+0.00i)  
(+0.00+0.00i)  (+2.22e-16+0.00i)  (-0.589+0.00i)  (-0.816+0.00i)  
(+0.00+0.00i)  (+2.22e-16+0.00i)  (+0.0467+0.00i)  (+0.404+0.00i)  

我想摆脱那种偏移。如果给出前面的代码,我如何强制这种对齐?我列出的功能对这个问题并不重要。这只是关于printf的问题。

为清楚起见,目标是这样的:

(  ) (  ) (  )
(  ) (  ) (  )
(  ) (  ) (  )

4 个答案:

答案 0 :(得分:2)

使用%3.3f代替%3.3g

答案 1 :(得分:2)

我假设您的问题是您希望输出具有常量,以便结果形成对齐的列。

首先,使用%f代替%g来删除小数字的指数表示法。

其次,增加宽度。 %+#3.3f要求小数点右边有三位数字加上一个前导符号,依此类推,如果结果短于,请在左侧填充空格三个字符。例如,如果您使用%+#7.3f,则可以更好地获得对齐的列。

答案 2 :(得分:1)

如果您只想要更多填充来形成列,可以尝试:

printf("(%+#8.3g%+#8.3gi)  ",row->m[n].re,row->m[n].im);

如果你想要0填充,只需在格式中添加0:

printf("(%+0#8.3g%+0#8.3gi)  ",row->m[n].re,row->m[n].im);

答案 3 :(得分:1)

另一种可能性是使用sprintf(或者,最好是snprintf)将每个条目格式化为字符串,然后使用%-12s打印字符串,或者适当的长度。< / p>

如果您一直想要科学记数法,请使用%...e...不是文字)。