2016-11-15 47 views
0
#include<stdio.h> 
int main() 
{ 
int i=10; 
printf("%d",printf("%d",i)); 
return(0); 
} 

在Turbo C輸出如何解釋這個簡單的C代碼的輸出?

我是初學者。那麼你能解釋這個代碼的工作原理嗎?

+2

「printf」的手冊頁說了什麼關於它的返回值? [請RTM](https://en.wikipedia.org/wiki/RTFM)。 –

+0

如果插入'newline',它可能會更清晰。 'printf(「\ n%d」,printf(「%d」,i));' –

回答

2

printf的文檔聲明它將返回一個整數,該整數表示寫入輸出流的字符數。

這意味着可以使用的printf的返回值,以滿足在另一呼叫的%d格式說明printf,和第二(外)調用將打印出寫在所述第一呼叫中的字符數。

i等於10,所以printf第一呼叫輸出數10並返回2,其被傳遞到第二呼叫到printf,打印2(字符串"10"中的字符數),給您最終產出102

+0

非常感謝你.. – Ricky

+0

@Ricky不用客氣;一旦您找到滿意答案,您可以通過點擊投票圖標下方的複選框將其標記爲已接受。 –

0

引用C11,章§7.21.6.1

fprintf函數返回發送的字符數,或負值 如果發生了輸出或編碼誤差。

在你的情況下,內printf()呼叫的參數外printf(),因此內的函數調用將被執行,按功能參數評價的規則。

所以,在你的情況,第一內printf()執行時,打印的i的值,即,10(2個字符)和printf()調用的返回值被用作參數來%d格式說明外printf() ,印刷2

由於沒有可視化分隔符,因此您會看到彼此相鄰的輸出,顯示爲102

+0

但爲什麼輸出:102? – Ricky

+0

@Ricky的意思是?你真的讀過答案嗎? –

0

printf()是一個C函數。它返回的int值等於它打印的字節數。

在你的情況下,內printf的印有「10」,所以它寫2個字節,將返回2.

外的printf因此將打印「2」。最終結果:「102」(INNER的「10」,後面是「OUTER」的「2」)。

1

讓我們拆開產生輸出頂級語句:

printf("%d",printf("%d",i)); 
  • 我們在頂層的printf函數調用,傳遞兩個函數的自變量
  • 的第一個參數頂級printf是格式字符串"%d"
  • 頂級printf的第二個參數是調用的結果printf("%d",i)

頂級printf的參數,即printf("%d",i),需要在撥打電話之前進行評估。該表達式具有價值和副作用。副作用是將"10"打印到輸出,並且該值是打印的字符數,即2

由於參數是在撥打電話之前評估的,因此首先調用printf("%d",i),產生輸出10。現在調用頂級printf,並生成輸出2,完成您看到的"102"序列。