2016-06-28 5 views
0

は私のコードで論理エラーを把握manner..cant ..プリント要素

void spiral(int n,int m,int arr[][m]) 
{ 
    int t=0,r=m-1,b=n-1,l=0,dir=0; /* t->top b->bottom l->left r->right */ 
    int k,j; 
    // above parameters to manage the matrix.  

    // exit condition from loop 
    while (t<=b && l<=r) 
    { 
     // print top row 
     if (dir==0)       
     { 

      for (k=l;k<=r;k++) 
      { 
       printf("%d ",arr[t][k]); 

      } 
      dir=1; 
      t++; 

     } 

     // print right column 
     else if (dir==1)   
     { 

      for (k=t;k<=b;k++) 
      { 
       printf("%d ",arr[k][r]); 

      } 
      dir=2; 
      r--; 

     } 

     // print bottom row 
     else if (dir==2)    
     { 

      for (k=r;k>=l;k--) 
      { 
       printf("%d ",arr[b][k]); 

      } 
      dir=3; 
      b--; 

     } 

     // print left column 
     else if (dir==3)   
     { 

      for (k=b;k<=t;k--) 
      { 
       printf("%d ",arr[k][l]); 

      } 
      dir=0; 
      l++; 

     } 
    } 
} 
+3

ようこそスタックオーバーフローへ:

はここで働いて可能な実装です!デバッガを使用してコードをステップ実行する方法を学ぶ必要があるようです。良いデバッガを使用すると、プログラムを1行ずつ実行し、どこからずれているかを確認することができます。これはプログラミングをする場合に不可欠なツールです。さらに読む:[小さなプログラムをデバッグする方法](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。 –

+4

コメントを使用してください、コードを分割しないでください。 –

+0

適切なサンプル(非正方形)の行列を入力と期待される出力として表示すると便利です(MCVE([MCVE])の作成方法を参照)。時計回りか反時計回りに螺旋状になっていますか?あなたは左上、右下、または他のコーナーの1つで始まっていますか? (どこに要素 'm [0] [0]'がありますか?左下、左上、他のどこですか?)左上隅に 'm [0] [0]'を使っているように見えます。コメントから判断すると、左上と螺旋時計回りに表示されます。しかし、そのような詳細を明確にすることは、人々があなたが望む答えを得るのを助けるのに役立ちます。 –

答えて

0

タスクを達成するには、noがあります変数dirを使用し、すべてのステップが同じ順序で繰り返されるのでその値をチェックする必要があります。

最後のループの条件にもエラーがありました。はk >= tである必要があります。

void spiral(int n,int m,int arr[][m]) 
{ 
    int top = 0,    
     right = m - 1,  
     bottom = n - 1,  
     left = 0, 
     k; 

    while(top <= bottom && left <= right) 
    { 
     //print top row 
     for (k = left; k <= right; k++) 
     { 
      printf("%d ",arr[top][k]); 
     } 
     ++top; 

     //print right column 
     for(k = top; k <= bottom; k++) 
     { 
      printf("%d ",arr[k][right]); 
     } 
     --right; 

     //print bottom row 
     for(k = right; k >= left; k--) 
     { 
      printf("%d ",arr[bottom][k]); 
     } 
     --bottom; 

     //print left column 
     for(k = bottom; k >= top; k--) 
     // this was wrong ^^^^^^ in OP's code 
     { 
      printf("%d ",arr[k][left]); 
     } 
     ++left; 
    } 
} 

ライブ例HERE