2017-05-24 64 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);