我有这个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
答案 0 :(得分:7)
while (f != NULL && t!= NULL)
仅当f
和t
都为非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
当boolean1
为false
时,由于short circuit evaluation,甚至无法达到boolean2
,因为无论如何结果都是false
。因此,在这种情况下,如果双方都是true
,则仅满足 的循环条件。
您可能希望使用||
代替&&
:
while(f != NULL || t!= NULL)
现在只要两个中的一个是true
,就会满足条件。
答案 2 :(得分:2)
只要两个条件都为真,循环就会运行,只要其中一个条件为假,它就会结束。
如果你想让它在其中一个为真的情况下运行,并且只要它们都为假就结束,那么:
将&&
更改为||
。