我正在尝试在我的sprintf语句中完成一些格式化,但它似乎没有像我期望的那样工作。这是一行:
n = sprintf(buffer, "x = %d.%d, y = %d.%d, z = %d.%d \n", x1, x2, y1, y2, z1, z2);
在该打印输出中,x1是数字的整个部分,x2是小数部分。一切都会好的,除了我需要填充x2,y2和z2总是2位数 - 这意味着我需要用前导零填充。
我在网上看到的例子看起来应该可行:
n = sprintf(buffer, "x = %d.%02d, y = %d.%02d, z = %d.%02d \n", x1, x2, y1, y2, z1, z2);
然而,相反产生这样的东西:
x = 2.2d, y = 37.2d, z = 2.2d
上面的37实际上是x2,它显然已经转移到了y1。我尝试在'02'周围放置括号,但这也没有做任何事情。
我试过像这样分开这段时间:(但那不起作用)
n = sprintf(buffer, "x = %d. %02d, y = %d. %02d, z = %d. %02d \n", x1, x2, y1, y2, z1, z2);
我不确定出了什么问题......我很感激任何帮助。这在sprintf中并不是特别重要(我理论上可以写一些'if'语句并让它以这种方式工作),但它会很好。
谢谢!
答案 0 :(得分:1)
这是一个示例代码和输出。
float x1 = 10.12222;
float y1 = 20.23333;
float z1 = 30.34444;
int xi = 10;
int yi = 20;
int zi = 30;
int x0 = 5;
int y0 = 5;
int z0 = 5;
int xl = 10;
int yl = 10;
int zl = 10;
char chr[512];
printf("x = %5.2f, y = %5.2f, z = %5.2f\n", x1, y1, z1);
printf("x = %10d, y = %10d, z = %10d\n", xi, yi, zi);
printf("x = %010d, y = %010d, z = %010d\n", xi, yi, zi);
printf("x = %-10d, y = %-10d, z = %-10d\n", xi, yi, zi);
printf("x = %10.5d, y = %10.5d, z = %10.5d\n", xi, yi, zi); // DYNAMIC
/* Dynamic formatting of DYNAMIC commented line*/
sprintf(chr, "Dynamic: x = %%%d.%dd, y = %%%d.%dd, z = %%%d.%dd\n",
xl, x0, yl, y0, zl, z0);
printf(chr, xi, yi, zi);
输出将是这样的。
x = 10.12, y = 20.23, z = 30.34
x = 10, y = 20, z = 30
x = 0000000010, y = 0000000020, z = 0000000030
x = 10 , y = 20 , z = 30
x = 00010, y = 00020, z = 00030
Dynamic: x = 00010, y = 00020, z = 00030
%x.yd表示,
x - 整数的总字符数。
y - 在该长度内用0填充。
%10.5d将给出10,100,1000,10000,100000,100000
的以下结果bbbbbbbbbb => Spaces
00010
00100
01000
10000
100000
1000000
我希望这有助于您的格式化。