答案 0 :(得分:7)
第二(内部)printf的作用是打印与a
一样多的字符,然后打印与b
一样多的字符。 printf
返回打印的字符数,即a
和b
的总和。
现在让我们更深入一点,printf("%*s", a, "\r")
将打印一个通过参数指定宽度的字符串(在本例中为a
)-这就是星号的作用。默认情况下,字符串保留空格。因此,您将得到a - 1
个空格,后跟一个回车符。进行两次:printf("%*s%*s",a,"\r",b,"\r")
将首先打印宽度固定为a
的字符串,然后打印第二个宽度固定为b
的字符串。
此后,外部printf
将打印与内部printf
打印的字符数相对应的数字,但是我们已经知道会是什么,不是吗?
注意:由于左填充只能添加,而不会删除字符,因此a = 0
或b = 0
的代码实际上是错误的(当然是负数)
答案 1 :(得分:2)
由于printf
返回输出中的字符数,并且%*s
说明符实际上读取两个参数(一个整数和一个字符)并打印缩进的字符(因此在它之前打印了n-1个空格) ),基本上是内部printf
打印了a
+ b
\r
,而外部printf
打印了该数字。