2017-01-10 4 views
-1

このプログラムは配列内の文字列をソートしています。機能の並べ替えは、それが無いコンパイルエラーで実行されます第三時間後にストーピングさソート関数がエラーなく動作しなくなる - C

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

(叔母、兄)

(父、祖父、祖母)

(母親)

(ピンチ・シッター、叔父)

+2

コードをステップ実行したときにデバッガから通知される内容は何ですか? –

+0

私は実際にビジュアルスタジオでデバッガを使用する方法を知っていませんが、デバッガでプログラムを実行すると、コンソールに出力が表示され、CPUの割合が100%になるまで表示されます。無限ループのように聞こえる? –

+0

@ChenKahalanyデバッガを使用するのはかなり簡単です。行に移動し、F9キーを押してブレークポイントを設定します。次にF5キーを押してデバッガを起動し、F10キーを押してコードをスローします。ウォッチウィンドウで結果を確認します。 – nikau6

答えて

1

私はあなたのコードをデバッガで実行しますが、実際に動作するかどうかは試しませんでした。あなたが無限ループを起こす理由を見つけようとしました。問題はそこにあります:

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

比較の結果が肯定的であれば、無限ループに入ります。それは祖父と祖母を比較するときに起こります。

+0

それが解決します。ありがとうございました!! –

+0

しかし、あなたのコードはあなたの3D配列の4つの要素だからです。sizeof(arrPP)はあなたのために4つのポインタのサイズを与えます。それは純粋な運です。あなたはあなたのコードのどこかにあなたの3D配列のサイズを保存する必要があります。 – nikau6

関連する問題