【问题标题】:Why this while loop is not breaking? [duplicate]为什么这个while循环没有中断? [复制]
【发布时间】:2019-05-26 02:50:44
【问题描述】:

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

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

当 mempr 指向 "12"'1' 时,它会继续增加超过 ']'。 但是如果 mempr 指向 ',''}'']' 这个循环应该会中断,不是吗?但这个循环永远不会中断!并且内存继续增加。 我错过了什么?

【问题讨论】:

标签: c


【解决方案1】:

调试逻辑时,给自己做一个真值表。

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

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

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

您可以选择使用维恩图。为,}] 绘制三个不相交的圆圈。现在使用三种不同的填充图案来填充“不是, 的东西”、“不是} 的东西”、“不是] 的东西”。

这三个区域的联合覆盖了哪些区域? 路口覆盖哪些区域?

【讨论】:

    【解决方案2】:

    如果您使用OR 条件,您必须非常小心退出条件。 说如果你的条件是pointer != A || pointer != B, 遇到A,第一个条件返回false,第二个返回true。 当它遇到B 时,第一个条件返回true,所以它不会计算第二个。

    尝试使用 AND。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-06
      • 2017-04-18
      • 2020-01-17
      • 1970-01-01
      • 2013-08-04
      • 1970-01-01
      相关资源
      最近更新 更多