我想知道尝试在输出中安排我的列排队,我想使用%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
有没有办法排列|左边的数字和逗号之间没有空格?
我知道这是一个非常微不足道的问题,但我似乎无法找到任何东西。提前谢谢!
答案 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,您将始终可以超越字段宽度。