在C和C#這個片段:一個不尋常的循環語句
int ii;
for(ii=1;ii<5;ii++);
printf("ii = %d",ii);
打印出ii = 5
而這個片段(注意<=
):
int ii;
for(ii=1;ii<=5;ii++);
printf("ii = %d",ii);
打印出ii = 6
。
你能解釋一下這裏發生了什麼嗎? for
循環如何以分號結尾?
在C和C#這個片段:一個不尋常的循環語句
int ii;
for(ii=1;ii<5;ii++);
printf("ii = %d",ii);
打印出ii = 5
而這個片段(注意<=
):
int ii;
for(ii=1;ii<=5;ii++);
printf("ii = %d",ii);
打印出ii = 6
。
你能解釋一下這裏發生了什麼嗎? for
循環如何以分號結尾?
您for
循環體是空的:
int ii;
for(ii=1;ii<5;ii++);
// ↑ body of the for loop
printf("ii = %d",ii);
代碼設置ii
到1
,然後遞增ii
,直到它的5
沒有做在for
循環體東西,最後打印ii
。
如果你要打印數字1到4,那麼你應該把printf
呼叫在for
循環體:
int ii;
for(ii=1;ii<5;ii++) {
printf("ii = %d",ii);
}
thanxx的幫助 – CHANDRAHAS 2011-06-01 02:48:40
優秀的小箭頭。 :) – sarnold 2011-06-01 02:48:43
for (i = 0; i < 5; i++);
迭代從0到4,並每次它什麼都不做迭代。這是分號的空白語句。
這可以是有意義的,例如,在這裏:
for (i = 0; i < 5; printf ("%d", i++));
我會嘗試thanxx兄弟 – CHANDRAHAS 2011-06-01 02:48:26
由於for循環包含空語句(分號結束),中ii
值是導致循環退出值。所以當ii<5
是不正確的(因爲ii是5),你會看到5個輸出。
請記住,循環聲明的增量部分發生在循環結束處,所以輸出如預期的那樣 - 在第一個示例中,循環在ii變爲5之後停止(循環體,它是空的,執行ii
爲0到4)。
所述第二環的(空)體執行六次(從0至5),並且當二變爲6.
後的用於刪除分號停止,當表達一個for循環而不{}它將在語句之後的循環中執行代碼,直到找到一個;在你的情況下,for循環沒有找到要執行的語句。在for和下一行代碼之後刪除分號,print語句將被執行。
用你的代碼,得到輸出6是正確的。這裏是流程: 你的'ii'分別增加到5和6(到第一和第二循環)。因爲你正在循環for循環而沒有「需要」來執行正文(ii = 1; ii < 5; ii ++); #分號意味着你正在循環它而不需要執行主體,這意味着它正在循環,除了增加計數器之外不做任何事情。
(...) { // body }
沒有semicolo如果你有'需要'來執行正文。
它真的是i ++還是ii ++? – Hyperboreus 2011-06-01 02:45:30
你能解釋一下你的意思嗎?_for循環永遠不會以semicolon_ – sarnold 2011-06-01 02:46:29
結尾,這是(); – CHANDRAHAS 2011-06-01 02:47:01