考察printf函數返回值


最近偶然間見了這樣一道題: 
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函數返回值,題目不難,但是我們很少注意。
        歡迎各位交流分享,講解有不對之處,還望各位前輩指出。先在此謝謝啦!
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM