排序功能停止工作而没有任何错误 - C.

时间:2017-01-10 03:10:06

标签: c sorting pointers char-pointer

这个程序正在对数组中的字符串进行排序。

函数Sort在第3次运行后停止,没有编译错误

int  main(){
   char * arrP1[] = { "father", "mother", NULL };
   char * arrP2[] = { "sister", "brother", "grandfather", NULL };
   char * arrP3[] = { "grandmother", NULL };
   char * arrP4[] = { "uncle", "aunt", NULL };
   char ** arrPP[] = { arrP1, arrP2, arrP3, arrP4 , NULL }; 

   printAllStrings(arrPP);

   sort(arrPP);
   printAllStrings(arrPP);


   return 0;
}

void sort(char ** arrPP[]) {
int i, j, n, pi, pj;
int t;
char * temp;

for (n = 0; n < 8; n++) {
    pi = 0;
    pj = 0;
    printf("round %d\n", n);

    for (i = 0; i < (sizeof(arrPP)); i++) {
        for (j = 0; arrPP[i][j] != NULL; j++) {
            t = 0;
            if (i == 0 && j == 0)
                continue;

            while (1) { // checking wich word is bigger and swiching between them if needed

                if (arrPP[pi][pj][t] == arrPP[i][j][t])
                    continue;

                if (arrPP[pi][pj][t] > arrPP[i][j][t]) {


                    temp = arrPP[pi][pj];
                    arrPP[pi][pj] = arrPP[i][j];
                    arrPP[i][j] = temp;
                    break;
                }
                else {
                    break;
                }
                t++;
            }
            pi = i;
            pj = j;

        }
    }

}
}

outpot:

(父亲,母亲)

(姐姐,兄弟,祖父)

(祖母)

(叔叔,阿姨)

第0轮

第1轮

第二轮

预期的外汇:

(父亲,母亲)

(姐姐,兄弟,祖父)

(祖母)

(叔叔,阿姨)

第0轮

第1轮

第二轮

第3轮

第四轮

第5轮

第6轮

第7轮

(阿姨,兄弟)

(父亲,祖父,祖母)

(母亲)

(siter,叔叔)

1 个答案:

答案 0 :(得分:1)

我在调试器中运行你的代码,我没有真正尝试看它是否有效,我只是试图找到为什么你得到一个无限循环。问题在于:

 while (1) 
  { 
      if (arrPP[pi][pj][t] == arrPP[i][j][t])
          continue;
          ...

如果比较结果为肯定,则输入无限循环。当祖父与祖母比较时,就会发生这种情况。