C 为什么这个while循环没有中断?

C 为什么这个while循环没有中断?,c,C,我正在编写一个json解析器。在考虑这种json字符串“\“K\”:12}]”进行循环时,我使用了带指针的while循环。我正在尝试的代码如下: while ((*memptr != ',')||(*memptr != '}')||(*memptr != ']')) memptr++; 当memptr指向“12”的'1'时,它会继续增加,超过']。 但是如果memptr指向,'或'}'或']'这个循环应该会中断,不是吗?但这个循环永远不会中断!而且memptr还在不断增

我正在编写一个json解析器。在考虑这种json字符串
“\“K\”:12}]”
进行循环时,我使用了带指针的while循环。我正在尝试的代码如下:

while ((*memptr != ',')||(*memptr != '}')||(*memptr != ']'))
            memptr++;
当memptr指向
“12”
'1'
时,它会继续增加,超过
']
。 但是如果memptr指向
,'
'}'
']'
这个循环应该会中断,不是吗?但这个循环永远不会中断!而且memptr还在不断增加。
我遗漏了什么?

调试逻辑时,为自己创建一个真值表

让第一列为
*memptr
,第二列为
*memptr!=','
,然后用于
}
]
,最后是整个控制表达式
(*memptr!=','))| |(*memptr!='))| |(*memptr!='])

看到问题了吗?控制表达式始终为true,因此循环愉快地继续

您可以选择使用维恩图。为
}
]
绘制三个不相交的圆。现在使用三种不同的图案填充模式来填充“非
”,“非
}
,“非
]
”的内容

这三个地区的联合覆盖了哪个地区?
交叉口覆盖哪个区域?

如果您使用
条件,您必须非常小心退出标准。 假设您的条件是
指针!=A | |指针!=B
, 当遇到
A
时,第一个条件返回false,但第二个条件返回true。 当它遇到
B
时,第一个条件返回true,因此它不计算第二个条件

尝试使用和

1 | True  | True  | True  | True
, | False | True  | True  | True
} | True  | False | True  | True
] | True  | True  | False | True