为什么我的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贡献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'
)......”
紫衣仙女
TA贡献1839条经验 获得超15个赞
为什么我的
c != 'o' || c != 'x'
病情总是如此?
该表达式使用逻辑OR
运算符(||
)组合了两个子表达式。表达式true
是否至少有一个子表达式true
。为了成为false
它,它连接的两个子表达式必须是false
。
子表达式是c != 'o'
和c != 'x'
。
第一子表达c != 'o'
是false
时c == 'o'
。第二个相同; 它是false
什么时候c == 'x'
。
请注意,他们不能false
在同一时间,因为c
不能'o'
与'x'
在同一时间。
添加回答
举报
0/150
提交
取消