2015-12-04 143 views
-1

有人可以解釋這兩個for循環代碼之間的區別嗎?C - for循環代碼之間的區別

代碼1:

int j = 0; 
int i; 
int n = 8; 
for (i = 0; i < n; i++){ 
     printf("Value if I: %d\n",i); 
    while (j < n){ 
     printf("Value of J: %d\n",j); 
     j++; 
     } 
} 

} 

OUTPUT:

i = 0 , j = 0,1,2,3,4,5,6,7 
i = 1 
i = 2 
i = 3 
i = 4 
i = 5 
i = 6 
i = 7 

代碼2:

int i; 
int n = 8; 
for (i = 0; i < n; i++){ 
     printf("Value if I: %d\n",i); 
     int j = 0; 
    while (j < n){ 
     printf("Value of J: %d\n",j); 
     j++; 
     } 
} 

} 

OUTPUT:

i = 0 , j = 0,1,2,3,4,5,6,7 
    i = 1 , j = 0,1,2,3,4,5,6,7 
    i = 2 , j = 0,1,2,3,4,5,6,7 
    i = 3 , j = 0,1,2,3,4,5,6,7 
    i = 4 , j = 0,1,2,3,4,5,6,7 
    i = 5 , j = 0,1,2,3,4,5,6,7 
    i = 6 , j = 0,1,2,3,4,5,6,7 
    i = 7 , j = 0,1,2,3,4,5,6,7 

爲什麼上述兩個for循環代碼之間有變化?

+1

只要想一想兩個例子中每個循環中有什麼'j'。 – juanchopanza

回答

3

在第二個代碼中,您每次在while循環之前重置j,所以您可以獲得i的每個循環的j的所有值。 在第一種情況下,一旦達到j = 8,就不會再復位該值,因此每次檢查while條件時都會返回FALSE,並且不再打印它。

0

在第二個代碼中,您在for循環的每次迭代中將j初始化爲0。因此,您的while()循環在第二個代碼每次運行foor循環時運行8次。

要在展開,這裏是什麼情況:

int i; // i declared 
int n = 8; // n declared & initialised 
for (i = 0; i < n; i++){ // runs 8 times, while i < 8, i starting at 0 
     printf("Value if I: %d\n",i); // print 
     int j = 0; // declares & intialises j 8 times (every iteration) 
    while (j < n){ // runs 8 times j < 8, j starting at 0, for every iteration of the for loop 
     printf("Value of J: %d\n",j); // print 
     j++; // increment j 
     } 
} 

} 
1

那麼主要的區別是,殲創建每次在第二個代碼迴路做一個新的時間,比擬成一個局部變量在第一個循環中。

這意味着,在所述第一代碼爲J第一環路將始終是8和不會再進行打印(因爲它已經是8從第一回路)

int j = 0; 
int i; 
int n = 8; 
for (i = 0; i < n; i++){ 
     printf("Value if I: %d\n",i); 
    while (j < n){ 
     printf("Value of J: %d\n",j); 
     j++; 
     } 
    j = 0 //THIS RESETS J TO 0 SO IT WILL RUN 8 TIMES PER LOOP 
} 

} 

喜歡的東西上面將工作一樣第二塊代碼

0

因爲在第二個循環中,您將j值設置爲0,所以當while開始時,它必須打印0到8的所有數字。在第一個循環中,您將j值設置爲0一次所以在執行命令時,在下一個循環中,由於j值爲8,所以不執行,因此不要在每個循環中設置j = 0作爲第二個循環。

相關問題