#include<stdio.h>
int main()
{
int t = 23;
printf("%d\n", printf("%d", printf("%d", printf("%d", t))));
putchar(10);
printf("%d\n", printf("%d", printf("%d", t)));
putchar(10);
printf("%d\n", printf("%d", t));
putchar(10);
printf("%5d\n", printf("%-d", t));
putchar(10);
printf("%3d\n", printf("%5d", t));
putchar(10);
printf("%d\n", t);
putchar(10);
return 0;
}
运行结果如下图所示(为显示宽度)
猜想
- printf函数从右至左,先读取参数,然后按照格式显示
百度百科:
int printf(const char *format, [argument]);
说明printf函数类型为整型,其返回值是整型值。
其值为printf实际控制输出的字符数。
printf函数实际上是将所有参数按字符输出
论证
- printf("%d\n", t) 是正确(需要)的输出
- printf("%d\n", printf("%d", t))
printf("%5d\n", printf("%-d", t))
printf("%3d\n", printf("%5d", t))
第一个函数的值为232,23为我们需要的值,多出来的2就是实际输出的字符数。
第二个函数先print 23(左对齐),2是实际字符数(返回值),但是在print “2” 时宽度要求是5个字符宽,默认右对齐。
第三个函数先print 23 ,宽度要求是5,默认右对齐,此时前边这个printf的实际输出字符数是5(包括为扩充宽度填补的3个空格),故此时的返回值为5,宽度为3,默认右对齐。 - printf("%d\n", printf("%d", printf("%d", t)))
有了前边的铺垫,可以得到(从右至左),第一个返回值是2,第二个返回值是1(即第一个返回值的字符数) - printf("%d\n", printf("%d", printf("%d", printf("%d", t))))
同理,第一个返回值是2,第二个返回值是1,第三个返回值是1