0

我想检查两种枚举类型,但它似乎不起作用。我有以下内容:

typedef enum {
    ZSSegmentTypeE,
    ZSSegmentTypeS,
    ZSSegmentTypeO,
    ZSSegmentTypeD,
    ZSSegmentTypeN
} ZSSegmentType;

以下作品:

if (someSegmentType != ZSSegmentTypeN) {
    // Works
}

以下内容不起作用:

if (someSegmentType != ZSSegmentTypeN || someSegmentType != ZSSegmentTypeD) {
     // Does NOT work
}

为什么第二个示例不起作用,我正在测试两个不同的枚举?在理解枚举和比较如何工作时,我缺少什么?

4

2 回答 2

5

德摩根定律告诉你,这:

someSegmentType != ZSSegmentTypeN || someSegmentType != ZSSegmentTypeD

与此相同:

!(someSegmentType == ZSSegmentTypeN && someSegmentType == ZSSegmentTypeD)

我相信你意识到这someSegmentType不能同时是ZSSegmentTypeN 两者 ZSSegmentTypeD。因此,括号中的表达式将始终为假,而整个陈述将为真。

您可能想要测试的是该变量是否不是这两个值。你这样做:

someSegmentType != ZSSegmentTypeN && someSegmentType != ZSSegmentTypeD
于 2012-10-11T23:19:49.647 回答
2

假设您希望第二个 if 语句仅在 someSegmentType 不是两个值中的任何一个时才成功,那么您需要 &&,而不是 ||。

于 2012-10-11T23:15:07.360 回答