【问题标题】:How does the sequence of execution determined when multiple operators are involved?当涉及多个算子时,执行顺序如何确定?
【发布时间】:2016-04-27 10:10:24
【问题描述】:
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?

现在,我一直在疑惑最后一行代码中的表达式实际上做了什么。我怀疑它可能是某种形式的三元运算符?

【问题讨论】:

  • int ch == fgetc(stdin); 可能是一个错误,应该是int ch = fgetc(stdin);= 而不是==

标签: c syntax variable-assignment logical-operators


【解决方案1】:
EOLorEOFfound = ch == '\n' || ch == EOF;

做同样的事情

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

也就是说,将布尔表达式的结果分配给变量。这里没有魔法。

【讨论】:

  • 你是对的,没有魔法。感谢您提供清晰而简单的答案。
【解决方案2】:

根据operator precedence

  • == 具有最高优先级,
  • || 排名第二
  • = 最少。

所以,

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

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

所以它所做的就是将ch 与给定值进行比较,然后将结果分配给EOLorEOFfound

FWIW,请注意,逻辑 OR (||) 的结果是 int 类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-18
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    • 2023-03-14
    • 2011-03-02
    相关资源
    最近更新 更多