为什么我的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
提交
取消
