2017-05-24 62 views
0

我想冒泡排序一個字符串,它正在工作,但我想不出一種方式來退出這個無限循環。 請幫忙!如何從無盡的循環中跳出來c

do { 
    for (k = i; angrm1[k + 1] != ' '&&angrm1[k + 1] != 0; k++) { 
     if (angrm1[i] > angrm1[i + 1]) { 
      temp = angrm1[k]; 
      angrm1[k] = angrm1[k + 1]; 
      angrm1[k + 1] = temp; 
      flag = 1; 
     }i++; 
    } 
    if (angrm1[i+1] == ' ') 
     i = i + 2; 
    if (angrm1[i+1] == '\0') 
     i = 0; 
} while (flag != 0); 
+1

有沒有想過'break'? –

+3

我認爲你應該弄清楚的第一件事是*爲什麼*它是無止境的? –

+0

@narusin已經有一個停止條件。它只是應該被擊中。 –

回答

0

無限循環是由沒有條件設置flag = 0引起的。

這是一個清潔版本,取決於i而不是ik。我會留下空間供您實施。

do { 
    //Set flag to zero 
    flag = 0; 
    for(i = 0; angrm1[i] != '\0'; i++){ 
    if(angrm1[i+1] == '\0'){ 
     //If end of string, exit the loop by breaking 
     break; 
    } 
    if(angrm1[i] > angrm1[i+1]){ 
      temp = angrm1[i]; 
      angrm1[i] = angrm1[i+1]; 
      angrm1[i+1] = temp; 
      flag = 1; 
     } 
    } 
    i = 0; 
} while (flag != 0);