我正在编写一个json解析器。在考虑将此类json字符串"\"K\":12}]"
进行循环时,我使用带指针的while循环。我正在尝试的代码是这样的:
while ((*memptr != ',')||(*memptr != '}')||(*memptr != ']'))
memptr++;
当窃贼指向'1'
中的"12"
时,它继续增加到']'
以上。
但是,如果窃贼指向','
或'}'
或']'
,则此循环应该中断,不是吗?但是这个循环永远不会中断!而且主宰者继续增加。
我想念什么?
答案 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。