2013-05-07 93 views
-1

想這while循環:編譯器如何處理`(c = getchar())!= EOF`?

while ((c = getchar()) != EOF) 
     ^^^^^^^^^^^^^  
     assignment 

正如你可以看到,我們要分配比較EOF,怎麼可能發生?據我知道,所以你不能比較的分配任務不返回任何值(是嗎?)

+1

賦值通常會返回值:您可以將它用於「a = b = c = 0;」或者在您的示例中的條件中... – 2013-05-07 10:04:16

+1

它是一種表達式,而不僅僅是C語言中的賦值。 – BLUEPIXY 2013-05-07 10:05:41

+0

您需要習慣(子)表達式的**值**和**副作用**的概念。無論用戶輸入什麼,'c = getchar()'的**值**基本上都是。 **副作用**正在改變'c'的值。 – pmg 2013-05-07 10:08:37

回答

3

賦值表達式返回分配的值,在你是比較的的while ((c = getchar()) != EOF)情況來自標準輸入(什麼getchar()返回 - 這是分配值)的下一個字符與EOF

0

無論何時調用getchar(),它都會讀取輸入的下一個字符並將其返回給您。該函數返回一個int,它是相關字符的ASCII碼,但如果需要,您可以將結果分配給char變量。 所以通過這種方式,變量c正在獲取與EOF進行比較的值。該循環將一直運行,直到文件達到最終。