如果两者都为真,那么带&&的循环结束,而不是两者都为真

Sha*_*022 1 c++ loops linked-list while-loop

我有这个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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

  Memory Block Job

0 - 99                   FREE
100 - 129                  3
 IM IN THE BOTH
130 - 149                  FREE
150 - 179                  2
 IM IN THE BOTH
Run Code Online (Sandbox Code Playgroud)

sim*_*onc 7

while (f != NULL && t!= NULL)
Run Code Online (Sandbox Code Playgroud)

将评估真正的只有两个ft都是非NULL.

从循环内部的代码判断,您希望它在任何一个变量为非NULL时运行.您需要使用逻辑OR ||:

while (f != NULL || t!= NULL)
Run Code Online (Sandbox Code Playgroud)