2017-01-10 128 views
-1

該程序正在排序數組中的字符串。排序功能停止工作沒有任何錯誤 - C

功能排序是它沒有編譯錯誤運行第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

輪2

預期outpot:

(父,母)

(妹妹,兄弟,爺爺)

(祖母)

(叔叔,嬸嬸)

輪0

輪1

輪2

輪3

輪4

輪5

輪6

輪7

(伯母,兄弟)

(父親,爺爺,奶奶)

(母親)

(siter,叔叔)

+2

調試器告訴你什麼時候你通過代碼? –

+0

我真的不知道如何在Visual Studio中使用調試器..但是當我使用調試器運行程序時,它顯示控制檯上的輸出並顯示CPU的優先級,直到達到100%。聽起來像一個無限循環? –

+0

@ChenKahalany使用調試器相當簡單。轉到一條線並按F9設置中斷點。然後按F5啓動調試器,按F10步驟拋出代碼。在觀察窗口觀察結果。 – nikau6

回答

1

我在調試器中運行你的代碼,我沒有真正嘗試看它是否工作,我o試圖找出爲什麼你會得到一個無限循環。問題出在那裏:

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

如果比較的結果是肯定的,你輸入一個無限循環。它發生在比較祖父和祖母時。

+0

解決了它。謝謝!! –

+0

好的,但是你的代碼只能工作,因爲它們是你的3D數組中的四個元素,sizeof(arrPP)給出了一個指針的大小。這是純粹的運氣。您需要在代碼中的某處存儲3D數組的大小。 – nikau6