2014-01-29 31 views
0

與以下三個對於迴路相關聯的括號導致函數無限循環,支架引起無限循環

void Bubblesort (char ulist[27], char slist[27], int n) 
{ 
int i,j; 
char temp; 
for (i=1;i<=n;i++) 
{ 
    slist[i] = ulist[i]; 
    for (j=1; j <= n-1 ;j++) 
    { 
     for (i = 1; i <=n-j;i++) 
     {  
      if (slist[i] < slist[i+1]) 
      { 

       temp = slist[i]; 
       slist[i] = slist[i+1]; 
       slist[i+1] = temp; 
      } 

      } 
     } 
    } 
} 

雖然沒有括號;該功能到達最後。

void Bubblesort (char ulist[27], char slist[27], int n) 
{ 
int i,j; 
char temp; 
for (i=1;i<=n;i++) 
    slist[i] = ulist[i]; 
    for (j=1; j <= n-1 ;j++) 
     for (i = 1; i <=n-j;i++) 
      if (slist[i] < slist[i+1]) 
      { 
       cout << "Step 4"; 
       temp = slist[i]; 
       slist[i] = slist[i+1]; 
       slist[i+1] = temp; 
      } 



} 

有人能解釋這個原因嗎?

+1

您最內層和最外層的'for'循環都使用相同的索引變量'i'。對於3個循環,使用3個變量,例如, '我','j','k'。 – Matt

回答

2

你已經改變了循環的語義和你縮是誤導性的。

void Bubblesort (char ulist[27], char slist[27], int n) 
{ 
    int i,j; 
    char temp; 
    for (i=1;i<=n;i++) 
     slist[i] = ulist[i]; 
     for (j=1; j <= n-1 ;j++) 
      for (i = 1; i <=n-j;i++) 
       if (slist[i] < slist[i+1]) 
       { 
        cout << "Step 4"; 
        temp = slist[i]; 
        slist[i] = slist[i+1]; 
        slist[i+1] = temp; 
       } 
} 

應縮進爲

void Bubblesort (char ulist[27], char slist[27], int n) 
{ 
    int i,j; 
    char temp; 
    for (i=1;i<=n;i++) 
     slist[i] = ulist[i]; 

    for (j=1; j <= n-1 ;j++) 
     for (i = 1; i <=n-j;i++) 
      if (slist[i] < slist[i+1]) 
      { 
       cout << "Step 4"; 
       temp = slist[i]; 
       slist[i] = slist[i+1]; 
       slist[i+1] = temp; 
      } 
} 
1

的問題是,如果沒有括號,你實際上並沒有嵌套的for循環做。考慮

for (i=1;i<=n;i++) 
    slist[i] = ulist[i]; 
    for (j=1; j <= n-1 ;j++) 

沒有括號,只有slist[i] = ...行作爲第一個循環的一部分執行。一旦循環雖然最外和最內環路使用相同的索引變量被分組在一起的第二個for循環執行作爲一個完全獨立的實體

。他們對價值的共同改變共同創造了一個無限循環。嘗試對每個for循環使用不同的索引變量,它將解決問題。這工作沒有括號,因爲我所描述的初始誤差導致第一和最後一個循環不被嵌套,因此他們不是在同一時間

0

兩個功能有不同的算法操作相同的值。在第一個函數中,你有三個嵌套循環。第三個循環使用與第一個循環相同的控制變量'i'。這樣的環是無限的,因爲第三循環後i是總是等於2。

在第二功能的第一回路是一個單獨的循環,是其它兩個環未嵌套在第一環路內。因此,在第三個循環中更改控制變量「i」不會影響第一個循環。