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