什么是`printf`中的%* c%* c?

时间:2015-10-21 09:49:08

标签: c printf

当我在%*c%*c printf中使用printf时,它需要4个值,并且还会打印4和5的总和。我找不到合理的原因。

研究时,我发现%*c表示宽度。但是什么是宽度以及如何得出以下示例的总和?

printf("%*c%*c", 4, ' ', 5, ' ');

Ideone link

代码:

#include <stdio.h>

int add(int x, int y)
{
    return printf("%*c%*c",x,' ', y,' ');
}

int main()
{
    printf("%d",add(4,5));
    return 0;
}

3 个答案:

答案 0 :(得分:7)

printf返回打印的字符数。

printf("%*c", N, C);打印N-1个空白,后跟字符C。

更一般地说,printf打印N - length_of_text空白(如果该数字为> 0,则为零空白),后跟文本。这同样适用于数字。

因此

return printf("%*c%*c", x, ' ', y, ' ');

打印前缀为x的空格减去length_of_space其他空格(x-1),然后对y执行相同操作。在您的情况下,这会使4+5个空格。然后printf返回打印的字符总数,9。

printf("%d",add(4,5));

printf打印add()函数返回的整数,9。

默认情况下,printf是右对齐的(文本前的空格)。要使 - 对齐

  • 给出否定的N
  • -之前添加*,例如%-*s
  • 静态版本也适用,例如%-12s%-6d

答案 1 :(得分:5)

printf("%*c%*c", 4, ' ', 5, ' ');在大小为4的字段中打印一个空格,然后在大小为5的字段中打印一个空格。总共有9个字符。

在您发布的代码中,该函数返回printf的结果,它给出了打印字符的数量,因此9.在主页面中,然后打印此数字9。

答案 2 :(得分:1)

一切都如预期。根据{{​​3}}

  

<强>格式
  (可选的) 。后跟整数或*,或两者都不指定转换的精度。 在使用*时,精度由int类型的附加参数指定。如果此参数的值为负,则忽略它。如果既不使用数字也不使用*,则精度取为零。请参阅下表,了解精确度的确切影响。

     

返回值
  1-2)成功时写入的字符数,如果发生错误则写入负值。

所以在你的情况下:

int add(int x, int y)
{
    return printf("%*c%*c",x,' ', y,' ');
    //              ^ x is for the first *, y for the second *
}

结果,写入了x + y个空格(包括精度),这是返回值。