请问我的矩阵转置为什么输出后只把最后一行重复三遍?

#include
int main ()
{
int N,i,j,a[N][N],b[N][N],t;
scanf("%d",&N);
while(N--)
{
for(i=0;i<=N;i++)
for(j=0;j<=N;j++)
scanf("%d",&a[i][j]);
for(i=0;i<=N;i++)
for(j=0;j<=N;j++)
b[i][i]=a[N-1-j][i];
for(i=0;i<=N;i++)
{
for(j=0;j<=N;j++)
printf("%d",b[i][j]);
printf("\n");
}
}
return 0;
}

给b矩阵赋值的时候有点问题吧

#include
int main ()
{
int N,i,j;
scanf("%d",&N);

int** a = NULL,**b = NULL;
a= new int*[N];//分配内存空间
b= new int*[N];
for(i=0;i<N;i++)
{
    a[i]=new int [N];
    b[i]=new int [N];
}

while(N)
{
    for(i=0;i<N;i++)
    {
        for(j=0;j<N;j++)
        {
            scanf("%d",&a[i][j]);       
        }   
    }
    printf("\n");

    for(i=0;i<N;i++)
    {
        for(j=0;j<N;j++)
        {
            b[i][j]=a[j][i];        
        }

    }

    for(i=0;i<N;i++)
    {
        for(j=0;j<N;j++)
        {
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }

    for(i=0;i<N;i++)
    {
        for(j=0;j<N;j++)
        {
            printf("%d ",b[i][j]);
        }
        printf("\n");
    }
    N--;
}
for(i=0; i < N; i++)//释放内存
{
    delete [] a[i];
    delete [] b[i];
}
delete [] a;
delete [] b;

return 0;
}

试一试这段代码