2016-04-27 68 views
-1
while (!EOLorEOFfound) { 
     int ch == fgetc(stdin); 
     EOLorEOFfound = ch == '\n' || ch == EOF; 
} 

注:EOLorEOFfound是bool類型。涉及多個操作員時,執行順序如何確定?

我被StackOverFlow用戶給出了關於另一個問題的答案。在這裏看到:

How to determine if fgets stopped before all letters were read?

現在,我一直在puzzeling什麼在代碼的最後一行表達實際上做。我懷疑它可能是某種形式的三元運算符?

+4

'int ch == fgetc(stdin);'可能是一個bug,應該是'int ch = fgetc(stdin);'('='而不是'==') –

回答

4

作爲每operator precedence

  • ==具有最高的優先級,
  • ||是第二最高
  • =最小。

所以,

EOLorEOFfound = ch == '\n' || ch == EOF; 

相同

EOLorEOFfound = ((ch == '\n') || (ch == EOF)); 

所以它所做的就是,比較ch針對給定的值,然後,在EOLorEOFfound分配的結果。

FWIW,注意,邏輯OR(||)的結果是int類型的結果。

7
EOLorEOFfound = ch == '\n' || ch == EOF; 

確實相同

EOLorEOFfound = (ch == '\n' || ch == EOF); 

即,分配一個布爾表達式給一個變量的結果。這裏沒有魔法。

+1

你是對的,沒有魔力。感謝您提供清晰,簡單的答案。 –

相關問題