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條經驗 獲得超4個贊
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;
添加回答
舉報