我有两个开关,在我移动到程序的下一部分之前都需要激活。 通常,任何一个开关都可以打开或关闭。我希望在两个交换机都参与之前运行一个流程。 我似乎无法概念化编写此语句所需的逻辑。
我可以使用两个语句来做我想要的事情,例如:
Start_Process();
while(!sw1){
READ_SWITCHES();
delay();
}
while(!sw2){
READ_SWITCHES();
delay();
}
End_Process();
但我相信有更好的方法可以做到这一点。 到目前为止,我最好的猜测是:
while(!(sw1 || sw2)){
READ_SWITCHES();
delay();
}
但我不相信这是正确的。
由于某种原因,这看起来也不正确。
while(!sw1 && !sw2){
READ_SWITCHES();
delay();
}
我做了比这更复杂的逻辑语句,但出于某种原因,我没有看到我的方式通过这个简单的陈述。 感谢您提供的任何帮助。
答案 0 :(得分:4)
您需要一个evalualtes到"example"
的表达式,直到true
和sw1
中的一个或两个变量为sw2
。
试试这个
false
OR
while(!sw1 || !sw2) {
READ_SWITCHES();
delay();
}
请记住,根据De-Morgan定律,表达式while(!(sw1 && sw2)) {
READ_SWITCHES();
delay();
}
和!(sw1 && sw2)
是等效的。
答案 1 :(得分:3)
你想要一个OR语句:
while(!sw1 || !sw2){
READ_SWITCHES();
delay();
}
所以这将运行直到BOTH变为非零(即两个标志都已设置)
答案 2 :(得分:2)
在这些情况下,我总能找到真值表。
Input Ouptut
SW1 SW2 READ_SWITCHES?
F F T
F T T
T F T
T T F
然后尝试发现模式,在这种情况下它与AND逻辑相反:
!(SW1 && SW2)