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

Tha*_*rif 7 c printf

当我用printf %*c%*cprintf,它需要4个值,并打印出的4和5的总和我找不到这个正当的理由.

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

printf("%*c%*c", 4, ' ', 5, ' ');
Run Code Online (Sandbox Code Playgroud)

Ideone链接

代码:

#include <stdio.h>

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

int main()
{
    printf("%d",add(4,5));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Rin*_*g Ø 7

printf 返回打印的字符数.

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

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

因此

return printf("%*c%*c", x, ' ', y, ' ');
Run Code Online (Sandbox Code Playgroud)

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

printf("%d",add(4,5));
Run Code Online (Sandbox Code Playgroud)

这将printf打印add()函数返回的整数9.

默认情况下,printf是右对齐(文本前的空白).要使它对齐,要么

  • 给一个否定的N,或者
  • -*例如%-*s或之前添加一个
  • 静态版本也可以,例如%-12s,%-6d


Jea*_*nès 5

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

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