如果其中一个为真,则 && 结束循环,而不是如果两者都为真

While loop with && ends if either is true, instead of if both are true

本文关键字:如果 循环 结束 两者都 一个      更新时间:2023-10-16

我有这个while循环,如果其中一个情况为真,它总是结束,而不是只在两个情况都为真时才结束。有人知道为什么吗?

while (f != NULL && t!= NULL)
{
    if ( f == NULL && t!= NULL)
    {
        cout << t->start_byte << " - "<< left<< setw(20) << t-> end_byte <<  t->id << endl;
        t=t->next;
    }
    else if (t == NULL && f != NULL)
    {
        cout << f->start_byte << " - "<< left<< setw(21) << f-> end_byte << "FREE" << endl;
        f=f->next;
    }
    else
    {
        cout << f->start_byte << " - "<< left<< setw(21) << f-> end_byte << "FREE" << endl;
        cout << t->start_byte << " - "<< left<< setw(21) << t-> end_byte <<  t->id << endl;
        cout<< " IM IN THE BOTH " << endl;
        t=t->next;
        f=f->next;
    }
}

输出如下,请记住,在这个特定示例中,循环应该在底部再有一个 FREE 输出,因为我的 f 链表有 3 个节点,而我的 t 链表有 2

  Memory Block Job
0 - 99                   FREE
100 - 129                  3
 IM IN THE BOTH
130 - 149                  FREE
150 - 179                  2
 IM IN THE BOTH
while (f != NULL && t!= NULL)

仅当 ft 都为非 NULL 时,才会计算 true。

从循环中的代码来看,您希望它在任一变量为非 NULL 时运行。 您需要改用逻辑 OR ||

while (f != NULL || t!= NULL)

当您有boolean1 && boolean2时,以下是可能的情况:

boolean1 |    boolean2    | result 
---------+----------------+-------
  true   |      true      | true
  true   |      false     | false
  false  | doesn't matter | false

boolean1 false时,由于短路评估,甚至无法达到boolean2,因为无论如何结果都是false的。所以在这种情况下,只有当双方都true时,才会满足循环条件。

您可能希望使用||而不是&&

while(f != NULL || t!= NULL)

现在,如果两者中只有一个true,条件将得到满足.

只要两个条件都为真,循环就会运行,并在其中一个条件为假时立即结束。

如果你想让它运行,只要其中一个是真的,并在两个都是假的就结束,那么:

&&更改为 ||