5 回答
TA贡献1865条经验 获得超7个赞
j--这里是死代码,永远无法访问。想一想这段代码是如何工作的:
X2: for(j = 3; j > 0; j--){
if(i < j) continue X1;
else break X2;
}
如果在一种情况下你继续到外循环,在另一种情况下你会跳出这个循环。这个循环实际上从来没有超过一次迭代,所以你不妨这样写:
int i=0, j=0;
X1: for(i = 0; i < 3; i++){
j = 3;
if(i < j) continue X1; //This line does nothing at this point as well since the loop will iterate anyway
}
这与您当前的代码完全相同,它清楚地表明jwill stay at 3。
TA贡献1934条经验 获得超2个赞
最初 j 的值为 0,当我们进入循环时为 3,但在最后一次迭代中我们并没有真正进入 X2 循环,因为 i<3 评估为 false。所以问题是为什么编译器“保存” k 的值?
j 在 main 的第一行声明。这意味着它将保留在范围内并保留所有修改,直到 main 结束并且变量被销毁。
即使编译器保存了上一次迭代的 j 值,它也应该是 2。
正如您上面所说,循环的最后一次迭代中 j 的值是 3 而不是 2。当您继续 X1 时,j-- 从未执行过。
TA贡献1887条经验 获得超5个赞
这是因为其他人提到的死代码。您应该逐步调试您的程序 我不知道您使用的是哪个 IDE,但它可能提供此功能。
但是,我想建议您不要使用 continue 和 break 语句。导师非常不鼓励。它们会像您一样引起意大利面条式编程和混乱。
TA贡献1872条经验 获得超3个赞
else break X2;
和
j--
永远不会被达到。
'i' 在循环内永远不能为 3,因为外循环的条件是 i < 3,因此内循环只能执行
if(i < j) continue X1;
因为 'j' 总是从 3 开始并且 i <= 2. 总是正确的。所以 'j' 永远不会改变值,并且当 i = 3 时外循环中断,结果是“3 3”。
i j
0 3
1 3
2 3
break occurs;
print i + j;
添加回答
举报