这个printf技巧是如何工作的

时间:2018-12-14 12:11:35

标签: c printf

取自here

printf("%d", printf("%*s%*s",a,"\r",b,"\r") );

将打印a + b的结果。

它在地球上如何工作?

2 个答案:

答案 0 :(得分:7)

第二(内部)printf的作用是打印与a一样多的字符,然后打印与b一样多的字符。 printf返回打印的字符数,即ab的总和。

现在让我们更深入一点,printf("%*s", a, "\r")将打印一个通过参数指定宽度的字符串(在本例中为a)-这就是星号的作用。默认情况下,字符串保留空格。因此,您将得到a - 1个空格,后跟一个回车符。进行两次:printf("%*s%*s",a,"\r",b,"\r")将首先打印宽度固定为a的字符串,然后打印第二个宽度固定为b的字符串。

此后,外部printf将打印与内部printf打印的字符数相对应的数字,但是我们已经知道会是什么,不是吗?

注意:由于左填充只能添加,而不会删除字符,因此a = 0b = 0的代码实际上是错误的(当然是负数)

答案 1 :(得分:2)

由于printf返回输出中的字符数,并且%*s说明符实际上读取两个参数(一个整数和一个字符)并打印缩进的字符(因此在它之前打印了n-1个空格) ),基本上是内部printf打印了a + b \r,而外部printf打印了该数字。