-1

我想知道尝试将输出中的列排列起来,我想使用 %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 

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

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

4

2 回答 2

1

诀窍是所寻求的间距取决于 a double,但间距出现thedouble和逗号之后。建议分步打印,用 from 的返回值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]); 
于 2014-09-07T05:25:25.543 回答
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/ discusing '.number'

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

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

于 2012-12-06T19:11:48.970 回答