正浮点数和负浮点数的C格式代码

正浮点数和负浮点数的C格式代码,c,printf,C,Printf,如何强制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("

如何强制
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

我当前的错误解决方案是一个
if-else
语句,条件是分数变量的符号可以从两个不同的
printf
s中选择加号和减号。

从中,下面是
printf
转换规范

%[flags][width][.precision][size]type
因此,如果我们将flag指令设置为
+
,则符号(+或-)将显示为输出值的前缀。比如说,

printf("%+5.2f\n%+5.2f\n", -19.86, 19.86); // prints -19.86 \newline +19.86
从中,以下是
printf
转换规范

%[flags][width][.precision][size]type
因此,如果我们将flag指令设置为
+
,则符号(+或-)将显示为输出值的前缀。比如说,

printf("%+5.2f\n%+5.2f\n", -19.86, 19.86); // prints -19.86 \newline +19.86

是的,没有足够的字段宽度<代码>%2.3f注定会失败,因为小数点后3位加上该点将始终比指定的
2
宽度宽。是时候读《星》了,真是太容易了!啊!是的,没有足够的字段宽度<代码>%2.3f注定会失败,因为小数点后3位加上该点将始终比指定的
2
宽度宽。是时候读《星》了,真是太容易了!啊<代码>2.2?第一个
2
用于什么?逗号前的数字、逗号和逗号后的数字都计入宽度。因此,如果精度为2,数字将至少有一个逗号和逗号后的两个数字,因此至少有3个字符。所以宽度2被忽略,字段的宽度至少比3宽。也许
%+5.2f
?@KamilCuk你说得对!宽度是可选的,在这种情况下将被忽略。正如您所建议的,我将其更改为上面示例所需的足够宽度。此外,在手册页中,较小的宽度不会导致值被截断。因此,我们可以完全忽略宽度,使用类似
+.2f
的东西。谢谢您的评论。
2.2
?第一个
2
用于什么?逗号前的数字、逗号和逗号后的数字都计入宽度。因此,如果精度为2,数字将至少有一个逗号和逗号后的两个数字,因此至少有3个字符。所以宽度2被忽略,字段的宽度至少比3宽。也许
%+5.2f
?@KamilCuk你说得对!宽度是可选的,在这种情况下将被忽略。正如您所建议的,我将其更改为上面示例所需的足够宽度。此外,在手册页中,较小的宽度不会导致值被截断。因此,我们可以完全忽略宽度,使用类似
+.2f
的东西。谢谢你的评论。