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

时间:2019-05-26 02:50:45

标签: c

我正在编写一个json解析器。在考虑将此类json字符串"\"K\":12}]"进行循环时,我使用带指针的while循环。我正在尝试的代码是这样的:

while ((*memptr != ',')||(*memptr != '}')||(*memptr != ']'))
            memptr++;

当窃贼指向'1'中的"12"时,它继续增加到']'以上。 但是,如果窃贼指向',''}'']',则此循环应该中断,不是吗?但是这个循环永远不会中断!而且主宰者继续增加。 我想念什么?

2 个答案:

答案 0 :(得分:1)

调试逻辑时,使自己成为一个真值表。

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

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

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

您可以选择改为使用维恩图。为,}]绘制三个不相交的圆。现在,使用三种不同的阴影图案来填充“非,的事物”,“非}'的事物,“非]的事物”。

这三个区域的联合覆盖哪个区域? 交叉路口覆盖什么区域?

答案 1 :(得分:0)

如果使用OR条件,则必须非常注意退出条件。 假设您的条件是pointer != A || pointer != B,     当遇到A时,第一个条件返回false,但是第二个条件返回true。     当它遇到B时,第一个条件返回true,因此不会第二次求值。

尝试使用AND。