printf函数的返回值类型是int。也就是说在进行嵌套使用时,其打印格式是%d
#include
int main()
{
printf("%d",printf("%d",1);
return 0;
}
printf函数返回值返回的是打印的字符的个数
#include
int main()
{
printf("%d", printf("%d",43) );
return 0;
}
其运行结果如下图所示:
这里还涉及到了函数的嵌套调用。
当执行最外层的printf的时候,其打印内容是printf("%d",43)的返回值
而在最外层printf函数得到printf("%d",43)的返回值之前,会先执行printf("%d",43)
也就是会先打印 43
43共2个字符,所以printf("%d",43)返回整型2
此时的代码等价于
#include
int main()
{
printf("%d", 2 );
return 0;
}
因此整个输出结果就是432
请写出下列代码的输出结果:
#include
int main()
{
printf("%d",printf("%d",printf("%d",43)));
return 0;
}
正确结果:4321
这并不困难,我们再加点难度
请写出下列代码的输出结果:
#include
int main()
{
printf("%d ", printf("%d ", printf("%d ", 43)));
return 0;
}
正确答案是:43 3 2 (43和3和2之间都各有个空格)
这次做对了吗?
其实这里放了个陷阱:打印格式多了个空格,而空格也是一个字符
我们在上面讲了,printf函数返回的内容是打印的字符的个数
也就是说像'\n' ' '(空格) 这些字符都会算在个数里面
为了使结果明显,我们暂时将*代替空格
具体详解:第一次打印43*;一共有4、3和空格(*)这三个字符,返回3
第二次打印3*;一共有3和空格(*)这两个字符,返回2
第三次打印2*
所以整个代码运行下来的输出结果就是:43*3*2*
把*换回空格就是最开始的结果:43 3 2 啦:)
写一段代码使
第一行输出Hello World!
第二行输出Hello World!的返回值
下面是正确代码
#include
int main()
{
int n = 0;
n = printf("Hello World!");
printf("\n");
printf("%d", n);
return 0;
}
这是运行结果:
因为要实现分行,而分行字符'\n'会影响printf的返回值
所以为了正确打印Hello World!的返回值,就要将'\n'单独打印
当然,更熟练掌握printf函数用法的话,还能将代码写的更短,甚至不用额外创建一个变量
只要在打印格式里加一个\n就可以啦,同时还用到了函数的嵌套调用。