我想检查两个枚举类型,但它似乎不起作用。我有以下内容:
typedef enum {
ZSSegmentTypeE,
ZSSegmentTypeS,
ZSSegmentTypeO,
ZSSegmentTypeD,
ZSSegmentTypeN
} ZSSegmentType;
以下作品:
if (someSegmentType != ZSSegmentTypeN) {
// Works
}
以下不起作用:
if (someSegmentType != ZSSegmentTypeN || someSegmentType != ZSSegmentTypeD) {
// Does NOT work
}
为什么这个第二个例子不起作用,我在测试两个不同的枚举?在理解枚举和比较的工作方式时我缺少什么?
答案 0 :(得分:4)
De Morgan's law告诉你,这个:
someSegmentType != ZSSegmentTypeN || someSegmentType != ZSSegmentTypeD
与此相同:
!(someSegmentType == ZSSegmentTypeN && someSegmentType == ZSSegmentTypeD)
我确信你会意识到someSegmentType
不能同时是ZSSegmentTypeN
和 ZSSegmentTypeD
。因此,括号中的表达式将始终为false,整个语句将为true。
你可能想测试的是变量不是这两个值。你这样做:
someSegmentType != ZSSegmentTypeN && someSegmentType != ZSSegmentTypeD
答案 1 :(得分:2)
假设您希望第二个if语句仅在someSegmentType不是这两个值时才成功,那么您需要&&,而不是||。