C语言问题第一次盲敲是棋盘问题随便给个点然后马走日走完8×8棋盘。但我的运行会错,求指出问题所在

#include<stdio.h>
int qipan[8][8];
int x1,y1;
int check1 [2] ;
int check2 [2];
int count1 =1;
int count = 1;
int paixu(int,int);
int check(int,int);
int paixu(int x,int y)
{
    x1 = x;
    y1 = y;
    check(x,y);
    if(check(x,y) ==1)
    {
        return 0;
    }
    
    

    
}




int main ()
{

    int i,j,k,x,y;
    check1[0] = -1;
    check1[1] = -1;
    for(i=0;i<8;i++)
    {
        for(j=0;j<8;j++)
        {
            qipan[i][j] = 0;
        }
    }
    printf("请选择你的起始位置:");
    scanf("%d %d",&x,&y);
    qipan[x][y] = count1++; 
    paixu(x,y);
    for(i=0;i<8;i++)
    {
        for(j=0;j<8;j++)
        {
            printf("%2d  ",qipan[i][j]);
        }
        printf("\n");
    }
    return 0;
}
int check(int x,int y)
{
    int i,j;
    int p1[8][2] = {x-2,y-1,x-2,y+1,x-1,y+2,x-1,y-2,x+1,y-2,x+1,y+2,x+2,y-1,x+2,y+1};
    int (*p2)[2] =p1; 
    for(i=0;i<8;i++)
    {
        for(j=0;j<2;j++)
        {
            if(*(*(p2+i)+j)>=0&&*(*(p2+i)+j)<8)
            {
                check1[j] = *(*(p2+i)+j);
                     }
        }
        if(check1[0] == -1 ||check1[1] ==-1)
        {
            check1[0] == check1[1] == -1;
        }
        if(check1[0]!=-1&&check1[1] !=-1)
        {
            if(qipan[check1[0]][check1[1]]==0)
            {
                qipan[check1[0]][check1[1]] = count1++;
                check2[0] = check1[0];
                check2[1] = check2[1];
                check1[0] = check1[1] = -1;
                count++;
                if(count<64)
                {
                 paixu(check2[0],check2[1]);
                    }
                else
                {
                    return 1;
                }
                        
            }
            check1[0] = check1[1] = -1;
        }
    }
    qipan[x][y] = 0;
    x = x1;
    y = y1;
    return 0;        
}


![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/544948622626198.jpg)

你的paixu()函数中调用了check()函数,check()函数中调用了paixu()函数,形成循环嵌套了,出来的结果肯定是不对的

#include<stdio.h>
int qipan[8][8];
int x1,y1;
int check1 [2] ;
int check2 [2];
int count1 =1;
int count = 1;
int check(int,int);
int main ()
{
    int i,j,x,y;    
    check1[0] = -1;
    check1[1] = -1;
    for(i=0;i<8;i++)
    {
        for(j=0;j<8;j++)
        {
            qipan[i][j] = 0;
        }
    }
    printf("请选择你的起始位置:");
    scanf("%d %d",&x,&y);
    qipan[x][y] = count1++; 
    check(x,y);
    for(i=0;i<8;i++)
    {
        for(j=0;j<8;j++)
        {
            printf("%2d  ",qipan[i][j]);
        }
        printf("\n");
    }
    return 0;
}
int check(int x,int y)
{
    int i,j;
    int p1[8][2] = {x-2,y-1,x-2,y+1,x-1,y+2,x-1,y-2,x+1,y-2,x+1,y+2,x+2,y-1,x+2,y+1};
    int (*p2)[2] =p1; 
    for(i=0;i<8;i++)
    {
        for(j=0;j<2;j++)
        {
            if(*(*(p2+i)+j)>=0&&*(*(p2+i)+j)<8)
            {
                check1[j] = *(*(p2+i)+j);
             }
        }
        if(check1[0] == -1 ||check1[1] ==-1)
        {
            check1[0] == check1[1] == -1;
        }
        if(check1[0]!=-1&&check1[1] !=-1)
        {
            if(qipan[check1[0]][check1[1]]==0)
            {
                qipan[check1[0]][check1[1]] = count1++;
                check2[0] = check1[0];
                check2[1] = check2[1];
                check1[0] = check1[1] = -1;
                count++;
                if(count<64)
                {
                    x1 = x;
                    y1 = y;
                     check(check2[0],check2[1]);
                }
                else
                {
                    return 1;
                }
                        
            }
            check1[0] = check1[1] = -1;
        }
    }
    qipan[x][y] = 0;
    x = x1;
    y = y1;
    return 0;        
}
#include<stdio.h>
int qipan[8][8];
int x1,y1;
int x2,y2;
int check1 [2] ;
int k,n,m;
int check2 [2];
int count1 =1;
int count = 1;
int check(int,int);
int main ()
{
    int c,z=0,x,y,l;    
    check1[0] = -1;
    check1[1] = -1;
    for(c=0;c<8;c++)
    {
        for(z=0;z<8;z++)
        {
            qipan[c][z] = 0;
        }
    }
    printf("请选择你的起始位置:");
    scanf("%d %d",&x,&y);
    l = qipan[x][y] = count1++; 
    check(x,y);
    for(c=0;c<8;c++)
    {
        for(z=0;z<8;z++)
        {
            printf("%2d  ",qipan[c][z]);
        }
        printf("\n");
    }
    return 0;
}
int check(int x,int y)
{
    int i=0,j=0;
    int p1[8][2] = {{x-2,y-1},{x-2,y+1},{x-1,y+2},{x-1,y-2},{x+1,y-2},{x+1,y+2},{x+2,y-1},{x+2,y+1}};
    int (*p2)[2] =p1; 
    for(i=0;i<8;i++)
    {
        for(j=0;j<2;j++)
        {
            if(*(*(p2+i)+j)>=0&&*(*(p2+i)+j)<8)
            {
                k = check1[j] = *(*(p2+i)+j);
             }
        }
        if(check1[0] == -1 ||check1[1] == -1)
        {
            check1[0] = check1[1] = -1;
        }
        if(check1[0]!=-1&&check1[1] !=-1)
        {
            if(qipan[check1[0]][check1[1]]==0)
            {
                qipan[check1[0]][check1[1]] = count1++;
                x2 = check1[0];
                y2 = check1[1];
                check1[0] = check1[1] = -1;
                count++;
                if(count<64)
                {
                    x1 = x;
                    y1 = y;
                     check(x2,y2);
                }
                else
                {
                    return 1;
                }
                        
            }
            check1[0] = check1[1] = -1;
        }
    }
    
    x = x1;
    y = y1;
    return 0;        
}

感谢已经做出来了。。