while while&&如果两者都为真,则结束,而不是两者都为真

时间:2014-02-12 08:19:55

标签: c++ loops while-loop linked-list

我有这个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个节点,而我的链表有2个

  Memory Block Job

0 - 99                   FREE
100 - 129                  3
 IM IN THE BOTH
130 - 149                  FREE
150 - 179                  2
 IM IN THE BOTH

3 个答案:

答案 0 :(得分:7)

while (f != NULL && t!= NULL)
仅当ft都为非NULL时,

才会评估为真。

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

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

答案 1 :(得分:3)

如果您有boolean1 && boolean2,则可能出现以下情况:

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

boolean1false时,由于short circuit evaluation,甚至无法达到boolean2,因为无论如何结果都是false。因此,在这种情况下,如果双方都是true,则仅满足 的循环条件。

您可能希望使用||代替&&

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

现在只要两个中的一个是true,就会满足条件。

答案 2 :(得分:2)

只要两个条件都为真,循环就会运行,只要其中一个条件为假,它就会结束。

如果你想让它在其中一个为真的情况下运行,并且只要它们都为假就结束,那么:

&&更改为||