2011-06-01 73 views
-4

在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循環如何以分號結尾?

+2

它真的是i ++還是ii ++? – Hyperboreus 2011-06-01 02:45:30

+0

你能解釋一下你的意思嗎?_for循環永遠不會以semicolon_ – sarnold 2011-06-01 02:46:29

+0

結尾,這是(); – CHANDRAHAS 2011-06-01 02:47:01

回答

7

for循環體是空的:

int ii; 
for(ii=1;ii<5;ii++); 
//     ↑ body of the for loop 
printf("ii = %d",ii); 

代碼設置ii1,然後遞增ii,直到它的5沒有做在for循環體東西,最後打印ii

如果你要打印數字1到4,那麼你應該把printf呼叫在for循環體:

int ii; 
for(ii=1;ii<5;ii++) { 
    printf("ii = %d",ii); 
} 
+0

thanxx的幫助 – CHANDRAHAS 2011-06-01 02:48:40

+5

優秀的小箭頭。 :) – sarnold 2011-06-01 02:48:43

2
for (i = 0; i < 5; i++); 

迭代從0到4,並每次它什麼都不做迭代。這是分號的空白語句。

這可以是有意義的,例如,在這裏:

for (i = 0; i < 5; printf ("%d", i++)); 
+0

我會嘗試thanxx兄弟 – CHANDRAHAS 2011-06-01 02:48:26

1

由於for循環包含空語句(分號結束),中ii值是導致循環退出值。所以當ii<5是不正確的(因爲ii是5),你會看到5個輸出。

1

請記住,循環聲明的增量部分發生在循環結束處,所以輸出如預期的那樣 - 在第一個示例中,循環在ii變爲5之後停止(循環體,它是空的,執行ii爲0到4)。

所述第二環的(空)體執行六次(從0至5),並且當二變爲6.

0

後的用於刪除分號停止,當表達一個for循環而不{}它將在語句之後的循環中執行代碼,直到找到一個;在你的情況下,for循環沒有找到要執行的語句。在for和下一行代碼之後刪除分號,print語句將被執行。

1

用你的代碼,得到輸出6是正確的。這裏是流程: 你的'ii'分別增加到5和6(到第一和第二循環)。因爲你正在循環for循環而沒有「需要」來執行正文(ii = 1; ii < 5; ii ++); #分號意味着你正在循環它而不需要執行主體,這意味着它正在循環,除了增加計數器之外不做任何事情。

(...) { // body }

沒有semicolo如果你有'需要'來執行正文。