2016-04-27 66 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

你是对的,没有魔力。感谢您提供清晰,简单的答案。 –

相关问题