C语言链式逻辑运算符使用出错,如何编写符合要求的if判断条件?
问题分析
你的逻辑错误出在EOF判断部分的运算符选择:
- 你编写的
(a != EOF || b != EOF)规则是「只要a、b其中一个不是EOF就满足条件」,和你需要的「两者都不能等于EOF」的要求完全不符。 - 举个反例:如果
a = EOF、b = 'a',此时a != b为真,(a != EOF || b != EOF)也为真(因为b不是EOF),整个if条件就会成立,不符合你要的「没有任一值等于EOF才执行」的要求。
修正方案
你需要把EOF判断部分的逻辑或(||)换成逻辑与(&&),满足「a不是EOF 且 b也不是EOF」的要求,修正后的代码如下:
if (a != b && a != EOF && b != EOF) { /* Do stuff */ }
如果要保留括号让逻辑分层更清晰,也可以写成:
if (a != b && (a != EOF && b != EOF)) { /* Do stuff */ }
两种写法逻辑完全等价,因为逻辑与是左结合运算符,加不加外层括号都不会影响执行结果。
逻辑验证
可以用真值表确认是否匹配需求:
- a为EOF、b为任意值:条件不成立,不执行代码块
- b为EOF、a为任意值:条件不成立,不执行代码块
- a等于b、且两者都不是EOF:条件不成立,不执行代码块
- a不等于b、且两者都不是EOF:条件成立,执行代码块
内容的提问来源于stack exchange,提问作者user419050
相关产品推荐
相关产品推荐

