#include <iostream>
#include <string>
using namespace std;
int main()
{
bool flag = false;
for (int i = 0; i < 4, !flag; i++)
{
cout << "TESTING1..\n";
for (int j = 0; j < 4, !flag; j++)
{
cout << "TESTING2.. \n";
if (j = 0) flag = true;
}
}
}
我正在尝试实现一种机制,其中我可以使用标记技术退出嵌套循环。但是,上述代码会导致无限循环。对此有解释吗?
标志变为真后,是否所有循环都不会爆发?
答案 0 :(得分:6)
if (j = 0) flag = true;
将永远不会被触发。
您的意思是:if (j == 0) flag = true;
单个=
是分配;双==
是比较。
答案 1 :(得分:0)
两个原因:
if (j = 0) flag = true;
将永远不会为真,因为j=0
是赋值为0
-false
的赋值。因此,flag
始终是false
。
在语句i < 4, !flag
中,使用了逗号运算符。这意味着将评估所有子表达式,并且表达式将使用最后一个子表达式的值。因此i < 4, !flag == !flag
。
由于始终flag == false
,!flag
始终是true
,因此无限循环。