
最近偶然间见了这样一道题:
#include<stdio.h>
int main()
{
int i=;
printf("%d\n",printf("%d",printf("%d",i)));
return ;
}
这个题感觉蛮怪的,不太常见!大家看看吧!
当然你在vc++6.0上一运行,你就能知道这个输出结果,但是你知道为什么吗?
请看:
以上程序输出结果为:

那么为什么是这个结果呢?大家请看下面解释:
*****************************************************************************************************
一、printf("%d\n",printf("%d",printf("%d",i) ) );
/*大家先看画线的这一部分,这一部分打印出来是:

这一步比较简单,没啥可说的,就是打印出来i的值43
**************************************************************************************************
二、printf("%d\n", printf("%d",printf("%d",i ) ) );
//这次画线部分打印出来是

这是因为
函数名 :printf函数原型:int printf (char * format,args,···);功能:按format指向的格式字符串所规定的格式,将输出表列args的值输出到标准输出设备。返回值:输出字符的个数,若出错,则返回负数。说明:format可以是一个字符串,或字符数组的起始地址。
理解:
其实主要printf返回值是字符串个数,就行了。
第一部分画线的是i=43,是两个字符,
所以第二个画线的输出就是2(代表43是两个字符)。
所以输出来就是432
**********************************************************************************************
三、printf("%d\n",printf("%d",printf("%d",i)));
这一部分打印出来是

分析:第三部分画线的1(代表第二部分中的2是一个字符。)
*************************************************************************************************
现在再举几个例子,加强理解:
例题1:
输入i=987;
输出最终结果是98731
分析:
因为987是三个字符,3又是1个字符;
-------------------------------------------------------------------
例题2:
输入i=56479854987;
输出最终结果就是56479854987112;
因为56479854987是11个字符,11是两个字符;
********************************************************************************************
好了,讲到这里相信大家都明白了吧!
这道题其实主要考察printf函数返回值,题目不难,但是我们很少注意。
欢迎各位交流分享,讲解有不对之处,还望各位前辈指出。先在此谢谢啦!