如何强制printf
格式代码(如%f
)为正数和负数生成对齐的填充输出。我写了以下玩具程序,这是我问题的一个最小但完整的例子:
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[])
{
int step = 1;
float score = 0.1;
float phi = 0.1;
float rho = 0.2;
printf(" # score phi rho\n");
printf("%2d %2.3f %1.2f %1.2f\n", step, score, phi, rho);
step++;
score++;
phi++;
rho++;
printf("%2d %2.3f %1.2f %1.2f\n", step, score, phi, rho);
step++;
score -= 1.2;
phi++;
rho++;
printf("%2d %2.3f %1.2f %1.2f\n", step, score, phi, rho);
return 0;
}
以下是结果:
# score phi rho
1 0.100 0.10 0.20
2 1.100 1.10 1.20
3 -0.100 2.10 2.20
我希望有这样的输出
# score phi rho
1 +0.100 0.10 0.20
2 +1.100 1.10 1.20
3 -0.100 2.10 2.20
或
# score phi rho
1 0.100 0.10 0.20
2 1.100 1.10 1.20
3 -0.10 2.10 2.20
我目前的解决方案是使用以{em> score 变量的符号为条件的if-else
语句在两个不同的printf
语句之间切换;一个带加号,另一个没有。
答案 0 :(得分:2)
遵循format specification syntax,遵循printf
转换规范
%[flags][width][.precision][size]type
因此,如果将标志指令设置为+
,则符号(+或-)会显示为输出值的前缀。例如,
printf("%+5.2f\n%+5.2f\n", -19.86, 19.86); // prints -19.86 \newline +19.86