当我在%*c%*c
printf
中使用printf时,它需要4个值,并且还会打印4和5的总和。我找不到合理的原因。
研究时,我发现%*c
表示宽度。但是什么是宽度以及如何得出以下示例的总和?
printf("%*c%*c", 4, ' ', 5, ' ');
代码:
#include <stdio.h>
int add(int x, int y)
{
return printf("%*c%*c",x,' ', y,' ');
}
int main()
{
printf("%d",add(4,5));
return 0;
}
答案 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
个空格(包括精度),这是返回值。