为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我的c!='o'|| c!='x'条件总是如此?

为什么我的c!='o'|| c!='x'条件总是如此?

为什么我的c!='o'|| c!='x'条件总是如此?我有这个循环语句,我将使用类似C的语法表达(C,C ++,Java,JavaScript,PHP等都使用类似的语法):while (c != 'o' || c != 'x') {     c = getANewValue();}我想让它一直运行,直到我得到一个'o'或'x',但它永远不会退出,即使c是'o'或'x'。为什么不?我也尝试过使用if:if (c != 'o' || c != 'x') {     // Show an error saying it must be either 'o' or 'x'}但这也总是显示错误信息,即使c是'o'或'x'。为什么?
查看完整描述

3 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

它必须if(c!='o' && c!='x')代替if(c!='o' || c!='x')。如果使用or运算符,则布尔表达式将始终为true。


查看完整回答
反对 回复 2019-08-28
?
白板的微信

TA贡献1883条经验 获得超3个赞

这种情况(c != 'o' || c != 'x')永远不会是假的。如果c'o',则为c != 'x'真,并满足OR条件。如果c'x',则为c != 'o'真,并满足OR条件。

你想要&&(AND),而不是||(OR):

while (c != 'o' && c != 'x') {
    // ...}

“虽然c不是'o'c不是''x'......”(例如,它们都不是)。

或者使用De Morgan的法律,包括:

while (!(c == 'o' || c == 'x')) {
    // ...}

“虽然这是不正确的(c'o'c'x')......”


查看完整回答
反对 回复 2019-08-28
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

为什么我的c != 'o' || c != 'x'病情总是如此?

该表达式使用逻辑OR运算符(||)组合了两个子表达式。表达式true是否至少有一个子表达式true。为了成为false它,它连接的两个子表达式必须是false

子表达式是c != 'o'c != 'x'

第一子表达c != 'o'falsec == 'o'。第二个相同; 它是false什么时候c == 'x'

请注意,他们不能false在同一时间,因为c不能'o''x'在同一时间。


查看完整回答
反对 回复 2019-08-28
  • 3 回答
  • 0 关注
  • 498 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信