我有这个if
语句,它不起作用:
if (pEntry->GetStudentMaterialStudyPoint(StudentAssign::kBibleReading) == 1 &&
(pEntry->GetStudentMaterialStudyPoint(StudentAssign::kItem1) == 1 && LOBYTE(LOWORD(pEntry->GetStudentAssignFlags()))) &&
(pEntry->GetStudentMaterialStudyPoint(StudentAssign::kItem2) == 1 && HIBYTE(LOWORD(pEntry->GetStudentAssignFlags()))) &&
(pEntry->GetStudentMaterialStudyPoint(StudentAssign::kItem3) == 1 && LOBYTE(HIWORD(pEntry->GetStudentAssignFlags()))) &&
(pEntry->GetStudentMaterialStudyPoint(StudentAssign::kItem4) == 1 && HIBYTE(HIWORD(pEntry->GetStudentAssignFlags()))))
{
MWBValidationErrorStruct errorMWBValidation;
errorMWBValidation.iDateIndex = iDateIndex;
errorMWBValidation.datMeeting = pEntry->GetMeetingDate();
errorMWBValidation.eValidationErrorType = CChristianLifeMinistryDefines::MWBValidationErrorType::MaterialStudyPoints;
m_listValidationErrors.push_back(errorMWBValidation);
}
}
我试图找出所有项目的值是否均为1。将始终检查第一个项目(圣经读物)。但是,只有在项目“ 1”到“项目4”被“包括”时才需要检查它们。这就是LOBYTE(LOWORD(pEntry->GetStudentAssignFlags()))
的目的。
所以
Bible Reading - 1
Item 1 - 1
Item 2 - 1 - Not included
Item 3 - 1 - Not included
Item 4 - 1 - Not included
在上述情况下,{BR}和项目1都设置为1,因此if
应该为true
。我们忽略了其他3个项目。
Bible Reading - 1
Item 1 - 2
Item 2 - 3
Item 3 - 1 - Not included
Item 4 - 1 - Not included
在上述情况下,if
应该返回false
,因为所有值都不都是1,而我们忽略了最后两项。
我的if
逻辑有什么问题?
答案 0 :(得分:3)
如果不包含某项,则应使用(!included || x == 1)
忽略检查。由于短路,如果included
为假,您甚至都不会检查OR的另一面,而这正是您想要的。
您的情况可能是这样的:
if (pEntry->GetStudentMaterialStudyPoint(StudentAssign::kBibleReading) == 1 &&
(!LOBYTE(LOWORD(pEntry->GetStudentAssignFlags())) || pEntry->GetStudentMaterialStudyPoint(StudentAssign::kItem1) == 1) &&
...
这可能有点令人困惑,所以让我们建立一个真值表...
included | x | !included | x == 1 | (!included || x == 1)
------------------------------------------------------
false | 3 | true | false | true
true | 3 | false | false | false
true | 1 | false | true | true
如果included = false
,则!included
将为true,因此(!included || x == 1)
将始终为true。这就是我们想要的-如果不包括在内,则即使不检查x == 1
也可以评估为true。
如果included = true
为假,则!included
为假,因此(!included || x == 1)
的值将为x == 1
。这又是我们想要的。如果包含我们,请依靠x == 1
。