如果其中一个为真,则 && 结束循环,而不是如果两者都为真
While loop with && ends if either is true, instead of if both are true
我有这个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)
仅当 f
和 t
都为非 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
,条件将得到满足.
只要两个条件都为真,循环就会运行,并在其中一个条件为假时立即结束。
如果你想让它运行,只要其中一个是真的,并在两个都是假的就结束,那么:
将&&
更改为 ||
。
相关文章:
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 如果 else 语句不断循环
- 如果代码包含多个复杂度循环,如何计算复杂度
- 如果语句不会在 do - while 循环中运行
- C++ 访问 if 语句(如果它们在 for 循环中)
- 如果我按enter键,我如何退出c++中的循环
- 如果输入数字为负数,如何循环
- C++代码在 for 循环的条件下给出运行时错误,而如果它被具有相同意义的代码替换,则编译正确
- 如果 return 语句在带括号的循环中,错误可能会到达非 void 函数的末尾,但不会显示在没有括号的循环的情况下
- 对于循环否则,如果语句未求值
- C++ 使用 OpenMP 时,如果 for 循环在 if else 语句中出错
- 如果输入变量的数据类型与以前不同,如何使我的循环仍然正常运行?
- 如果在C 中已经回荡了另一个相同值的阵列元素,请防止循环回荡
- C++17 如果初始化为 while 循环
- 如果条件太长,包括 for 循环
- 我可以将循环用作如果其他条件语句
- 如果我对循环进行以下更改,执行时间是否会减少
- 嵌套如果循环跳到第二个,即使第一个不为真
- C 数组,如果循环.如果循环忽略值并在输入值时给出错误的行