2015-12-18 72 views
2

我想下面的C代碼:爲什麼我的程序在for循環後沒有打印正確的值?

#include <stdio.h> 

int main() 
{ 
    int i=10; 
    int start=25; 
    int end = 30; 
    for(i = start; i < end; i++); 
    { 
     printf("%d\n", i); 
    } 
} 

我知道有在for循環結束分號其停止對迭代循環多次。但是我得到的結果是'30',而不是'25'。爲什麼我會得到這個結果?變量i應該保留其起始值,對吧?

+2

'我'從'25'開始並且加入'5'次。然後將'30' .... – LPs

+0

謝謝大家。每個人的評論都很有幫助。 – DrunkenMaster

+6

這個問題實際上提出了「爲什麼要循環計數」(如預期的那樣)。您可能想閱讀C書中有關循環的章節。 – Olaf

回答

18

該片段

for(i = start; i < end; i++); 
{ 
    printf("%d\n", i); 
} 

相當於

for(i = start; i < end; i++); 
printf("%d\n", i); 

展開進一步

for(i = start; i < end;) 
{ 
    i++; // This statement will execute till i < 30 
} 
printf("%d\n", i); 

條件i < end將評估爲falsei將由executi遞增到30在循環體內聲明i++
現在,陳述printf("%d\n", i);將被執行並將打印i的值30

16

我知道在for循環結束處有一個分號,它會停止for循環迭代多次。

這是不完全正確的:後for循環變得循環的空體分號。循環迭代五次,在每次迭代中遞增i。只有在循環結束時,花括號中的語句纔會執行。

在這一點上i變得30,因爲那是你的循環的後置條件(即條件,以便循環完成該必須是真實的)。這就是printf打印的內容。

22
for(i = start; i < end; i++); 

該代碼表示​​i25。循環繼續,而i<30。 然後循環後,i將如您所寫,30

在循環結尾處放一個分號不會停止循環:它會被執行。 在你的情況下{}只能打開不同的scope裏面的主要功能。

10
for(i = start; i < end; i++); 

這個循環將重複進行5次,直到i等於end30。在第1次迭代後它不會停止。

由於;以下printf不是循環體的一部分,但;並不意味着循環將迭代1時間。它將迭代到條件爲true,但循環的主體不包含除;以外的任何內容。

8

由於結腸你的程序是相當於現在:

#include <stdio.h> 

int main() 
{ 
     int i=10; 
     int start=25; 
     int end = 30; 

     for(i = start; i < end; i++) 
     { 
       //do nothing 
     } 

     printf("%d\n", i); 

} 

你的循環移動i30然後打印它。

2

大括號內的代碼(在for以下)不是for循環的一部分。 換句話說,由於在for語句末尾包含分號,因此您的循環沒有正文。

相關問題