正浮点数和负浮点数的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
的东西。谢谢你的评论。