最近偶然間見了這樣一道題:
1 #include<stdio.h> 2 int main() 3 { 4 int i=43; 5 printf("%d\n",printf("%d",printf("%d",i))); 6 return 0; 7 }
這個題感覺蠻怪的,不太常見!大家看看吧!
當然你在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函數返回值,題目不難,但是我們很少注意。
歡迎各位交流分享,講解有不對之處,還望各位前輩指出。先在此謝謝啦!