今天下編寫代碼時遇到了如下情況:期望是輸出
i=1,j=2
i=1,j=3
i=1,j=4
i=2,j=3
int main(void)
{int i,j;for(i=1;i<3;i++){for(j=1;j!=i&&j<4;j++){printf("i=%d,j=%d\n",i,j);}}return 0;
}
實際輸出結果:
i=2,j=1
分析上述代碼:
外出循環先執行i=1,再判斷i<3為真,內層循環執行j=1;判斷j!=i為假,退出內層循環,執行i++;此時i=2;判斷i<3為真,繼續執行j=1;判斷j!=i為真,且j<4為真,執行printf輸出i=2,j=2;再執行j++;此時j=2;判斷j!=i為假,退出內層循環,執行i++;此時i=3;判斷i<3為假,退出外層循環。結束
故最終結果是輸出i=2,j=1;
分析模板:
for(表達式1;表達式2;表達式3)
{表達式4;
}
執行順序:先執行表達式1,再執行表達式2,若表達式為真;繼續執行表達式4;再執行表達式3;再判斷表達式2若為真;在執行表達4,再執行表達式3,再判斷表達式2;如此循環。
即:表達式2為假,則退出循環,表達式2為真,執行表達式4,執行表達式3,再判斷表達2,如此循環,表達式1只會在第一次執行。