printf()
语句中宽度的用途是什么?为什么输出7在下面的例子中?
int add(int x, int y)
{
return printf("%*c%*c", x, '\r', y, '\r');
}
int main()
{
printf("Sum = %d", add(3, 4));
return 0;
}
Sum = 7
答案 0 :(得分:4)
A)这与printf有关。但既然你问过......
B)%*c
表示接受下两个printf的参数,并将它们解释为宽度和字符。在指定宽度的字段中打印该字符。在这种情况下,请打印包含字符x
的字段\r
。 y
和\r
也是如此。 Printf返回打印的字符总数,在本例中为x+y
。
所以输出实际上是x-1
个空格,\r
个字符,y-1
个空格,另一个\r
个字符(或者是左对齐的字符?),后跟{ {1}}。
答案 1 :(得分:3)
printf
返回输出的字符数。 %*c
表示将字符和填充打印到参数指定的宽度。所以printf("%*c", 3, '\r')
意味着打印一个前面有2个空格的回车。 printf("%*c%*c", n, '\r', m, '\r')
因此会打印n
+ m
个字符 - n
- 1个空格来填充第一个\r
,m
- 1个空格来填充第二个\r
,两个回车。这就是它返回7的原因。
回车会将您带回到行的开头,因此在打印完n
+ m
个字符后,下一个打印的内容将显示在行的开头。这意味着"Sum = "
会覆盖第一个printf的输出。
答案 2 :(得分:1)
如果成功printf返回打印的字符数。因此,printf
中的main
来电显示了printf
函数中add
打印的字符数,因为这是add
返回的内容。< / p>
答案 3 :(得分:1)
咨询任何manual表明printf
返回打印的字符数,不包括空终止符。 %*c
采用两个参数,第一个是字段宽度(因此分别为3和4),第二个是打印的实际字符。在这种情况下,字符是回车符(\r
),您可能无法在终端上看到。由于两个字符都使用填充打印,因此打印长度为7的字符串,并返回7。
由于你无法分辨空格和回车,看起来根本没有打印 - 尝试将输出汇总到一个文件或hexdump
。
答案 4 :(得分:0)
printf返回打印的字符数。在这种情况下,您通过指定x和y作为输出长度来打印7个字符。如果将return语句更改为:
return printf("%*c%*c\n", x, '\r', y, '\r');
输出将为8,因为还会打印一个新行。
答案 5 :(得分:0)
鉴于您的函数名称已添加,我非常怀疑这是您的意图。
printf()返回打印的字符数,在这种情况下显然是7个字符。然后,您将返回printf()返回的值并打印它。
似乎很奇怪。你有什么期待?