2017-05-24 8 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); 
関連する問題