0
Я пытаюсь напечатать элементы массива по спирали manner..cant выяснить логическую ошибку в моем коде ..печатные элементы 2d массива в форме спирали
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++;
}
}
}
Добро пожаловать на переполнение стека! Похоже, вам, возможно, потребуется научиться использовать отладчик для выполнения вашего кода. С хорошим отладчиком вы можете выполнить свою программу по очереди и посмотреть, где она отклоняется от ожидаемого. Это важный инструмент, если вы собираетесь заниматься программированием. Дальнейшее чтение: [Как отлаживать небольшие программы] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/). –
Пожалуйста, используйте комментарии, не разделяйте код. –
Было бы полезно показать подходящую образец (неквадратную) матрицу в качестве входных данных и ожидаемый результат (см., Как создать MCVE ([MCVE])). Вы спирали по часовой стрелке или против часовой стрелки? Вы начинаете с верхнего левого, нижнего правого или одного из других углов? (Где элемент 'm [0] [0]' - внизу слева, сверху слева, где-то еще?) Похоже, что вы используете 'm [0] [0]' в верхнем левом углу, и вы начинаете вверху слева и спиралью по часовой стрелке - судя по комментариям. Но прояснение таких деталей помогает людям помочь вам получить ответ, который вы хотите. –