C-(Printf)强制显示零
我有:C-(Printf)强制显示零,c,matrix,printf,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->
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");
}
}
打印输出的另一个示例:
(-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的问题
为明确起见,目标如下:
( ) ( ) ( )
( ) ( ) ( )
( ) ( ) ( )
使用
%3.3f
而不是%3.3g
我假设您的问题是希望输出具有常量,以便结果形成对齐的列
首先,使用%f
而不是%g
来摆脱小数字的指数表示法
第二,增加宽度<代码>%+#3.3f要求小数点右侧有三位数字,加上前导符号,以此类推,如果结果少于三个字符,请在左侧填充空格。例如,如果改为使用
%+#7.3f
,则更有可能对齐列。如果您只想使用更多填充来形成列,可以尝试:
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);
另一种可能是使用
sprintf
(或者最好是snprintf
)将每个条目格式化为字符串,然后使用%-12s
或任何适当的长度打印字符串
或者,如果您总是希望使用科学记数法,请使用
%..e
。对于这些示例,您希望的输出是什么样子的?括号中没有偏移量…您所说的“偏移量”是什么意思?每个括号都应该接触它下面的括号。应该形成列。有时我想知道我的值是否与一个非常小的数字相同f不适合这样做,因为科学记数法确实提出了这个问题。然后使用%3.3e
<代码>%e始终为您提供科学的符号<代码>%f从不这样做<代码>%g是否可以使用它,取决于值。如果希望得到一致的结果,请不要使用%g
。增加列填充是有效的。为了清楚起见,printf((((++8.3g%++8.3gi)”,row->m[n].re,row->m[n].im);
printf("(%+0#8.3g%+0#8.3gi) ",row->m[n].re,row->m[n].im);