2012-10-03 108 views
-1

解釋爲什麼輸出10會出現?解釋爲什麼輸出10會出現在c程序中

main() 
{ 

    for(printf("1");!printf("0");printf("2")) 
    { 
    printf("hello"); 
    } 
} 

輸出:

10 
+3

閱讀關於(;;)如何工作的信息。谷歌提出的[第一個鏈接](http://cprogramminglanguage.net/c-for-loop-statement.aspx)是合理的。 –

+0

想想for循環是由哪些部分組成的,以及'!printf()'的計算結果。 – chris

+3

我沒有回答這個問題,但我不明白你爲什麼這麼問。如果你找不到(也就是尋找和搜索)答案,你就不應該編程並做一些其他事情。你的老師可能想要鍛鍊你的技能(所以要求幫助會適得其反)。 –

回答

5

據其printf(3)手冊頁,所述printf函數返回

打印的字符的數目(不包括用於結束輸出爲字符串的空字節)

所以, for的初始化部分運行一次:printf("1");它將1字符放入stdout的緩衝區中。然後評估條件!printf("0");,因爲printf("0")被評估,它將0字符放入stdout的緩衝區中並返回輸出字符的數量,即1,因此條件爲假,並且存在for循環。

最後,main正在退出程序,那時只有stdout緩衝區被刷新。

要迂迴,您的程序會出現不同的行爲,因爲不太可能的原因,stdout無法成功寫入。

0

因爲在printf(「1」)它會按原樣執行語句。 然後printf(「0」)在屏幕上打印0並返回值1.當您否定它時,它會在C中給出一個等於false的值,以便for循環滿足其結束條件並退出。