使用sprintf()获得正确的格式

时间:2013-06-19 18:50:24

标签: c io printf code-composer

我正在尝试在我的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'语句并让它以这种方式工作),但它会很好。

谢谢!

1 个答案:

答案 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

我希望这有助于您的格式化。