在C中打印重要的整数位置

时间:2012-12-06 18:02:19

标签: c output

我想知道尝试在输出中安排我的列排队,我想使用%g打印静止,它必须以逗号分隔,但我很难让他们排队。

我目前正在打印所有双打:

fprintf(output, "|%-9.6g, |%-15.6g, |%-30.6g\n",x,data[2*Ndprime-value1+i],data[2*Ndprime-value1+i+1]); 

我的输出看起来像这样:

|-0.0859029, |506.929        , |-505.954                      
|-0.079767, |507.13         , |-506.212                      
|-0.0736311, |507.312        , |-506.451                      
|-0.0674952, |507.474        , |-506.671                      
|-0.0613592, |507.618        , |-506.872                      
|-0.0552233, |507.742        , |-507.053                      
|-0.0490874, |507.847        , |-507.216                      
|-0.0429515, |507.933        , |-507.359                      
|-0.0368155, |508            , |-507.484                      
|-0.0306796, |507.798        , |-507.839                      
|-0.0245437, |508.077        , |-508.675                      
|-0.0184078, |509.086        , |-509.242                      
|-0.0122718, |510.077        , |-508.79                       
|-0.00613592, |510.798        , |-507.569 

有没有办法排列|左边的数字和逗号之间没有空格?

我知道这是一个非常微不足道的问题,但我似乎无法找到任何东西。提前谢谢!

2 个答案:

答案 0 :(得分:1)

诀窍是所寻求的间距取决于double,但是 double之后的间距和逗号。建议逐步打印并使用fprintf()的返回值来控制下一个"%*s"。未经测试的代码构思如下:

fprintf()会返回打印char的数量(或错误时EOF)。

int len;
len = fprintf(output, "|%-9.6g,", x); 
len = (len > 13) 1 : 13 + 1 - len;
len = fprintf(output, "%*s|%-15.6g,", len, "", data[2*Ndprime-value1+i]); 
len = (len > 16) 1 : 16 + 1 - len;
fprintf(output, "%*s|%-30.6g\n", len, "", data[2*Ndprime-value1+i+1]); 

答案 1 :(得分:0)

这是我如何能够保持行左对齐,同时让逗号在数字后立即显示。

 sprintf(str1, "%.6g,", othernumbers[i]);
 sprintf(str2, "%.6g,", numbers[i]);

 printf("|%-10s |%-16s |%-30.6g\n",str2,str1,-othernumbers[i]);

然而要解决你的'|'问题不排队你可能不得不考虑不使用%g而是使用%f。

来自http://www.cplusplus.com/reference/cstdio/printf/讨论'.number'

  
      
  • 对于a,A,e,E,f和F说明符:这是小数点后要打印的位数。
  •   
  • 对于g和G说明符:这是要打印的最大有效位数。
  •   

因此,对于数字-0.00613592,由于小数点后面的2个零,因此显示的最小宽度始终为11。使用%f会将其降低到-0.006135。使用%g,您将始终可以超越字段宽度。