2013-08-31 86 views
-3

我的代碼:爲什麼這段代碼返回垃圾值?

void main() 
{ 
    while(1){ 
     if(printf("%d",printf("%d"))) 
      break; 
     else 
      continue; 
    } 
} 

我知道printf()返回字符printed.So數,爲什麼上面的代碼輸出Garbage values時候就應該輸出1. 請解釋。

謝謝。

+1

最左邊的printf的第二個參數應該是一個數字。你已經給它傳遞了一個函數printf。這就像試圖把軟糖熊放進你的油箱,這樣它就會運行。請閱讀printf的內容:http://www.cplusplus.com/reference/cstdio/printf/ –

+0

您是否熟悉'printf'的參數約定?如果是這樣,一點代碼檢查就可以解決你的問題。在「while」循環中使用它的目的是什麼? – lurker

回答

4

由於第二printf丟失,它應該是打印的數量...

BTW,不希望看到只有1,你會看到在此之前,第二printf印刷數量。例如。如果你的代碼是

printf("%d",printf("%d", 7)); 

你會看到71;第7將會打印出來,然後1

+0

「之前你會看到第二個printf打印的號碼。」這是什麼價值? – user2708039

+1

它不是422? printf返回寫入的字符數,所以printf(「%d」,42)應該返回2. –

+0

@NigelHarper,對,它是1的問題,但我想打印42並且不停地思考。修復了答案。 – nickie

2

因爲你沒有提供內部printf%d

請與參數:

if(printf("%d",printf("%d ",3))),請注意我用了一個空間%d

後現在你會看到

3 2

最後2因爲額外的空間

+0

謝謝。但我仍然不明白爲什麼我的代碼給垃圾值? – user2708039

+0

@ user2708039閱讀我的文章的第一行 '%d'是'printf'的格式說明符,它需要一個整數,因爲你沒有提供一個你會得到未定義的行爲 – P0W

0
printf("%d",printf("%d")) 

等於

int i = printf("%d"); 
printf("%d",i); 

然而,int i =printf("%d");線將printf的垃圾的價值,因爲你不給它需要的值。