三字棋游戏,玩家走的棋子神秘丢失

玩家走的棋子会丢失不记录,一模一样的代码,电脑走的却不会丢失,我也调试过了,就是在调用完玩家走的函数之后,调用电脑走的函数,玩家下的棋子就会被清空初始化了,而且奇怪的是,玩家走的棋子每次都会被清空,最后棋盘上等电脑的子符合胜利条件之后,会判断电脑胜利。

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ROW 3
#define COL 3

void boardinit(char arr[ROW][COL]) {
for(int i=0; i<ROW; i++)
for(int j=0; j<COL; j++)
arr[i][j]=' ';

}

void print(char arr[ROW][COL]) {
for(int i=0; i<ROW; i++) {
for(int j=0; j<COL; j++) {
printf(" %c ",arr[i][j]);
if(j<COL-1)
printf("|");
}
printf("\n");
for(int k=0; k<COL; k++) {
printf("---");
if(k<COL-1)
printf("|");
}
printf("\n");
}

}

void playermove(char arr[ROW][COL]) {
int x=0;
int y=0;

    printf("please enter the coordinate\n");

here:
scanf("%d%d",&x,&y);
if((x>ROW||x<1)||(y>COL||y<1)) {
printf("wrong value,please enter again\n");
goto here;
}
if(arr[x-1][y-1]==' ') {
arr[x-1][y-1]='*';
print(arr);

    }

    else {
        printf("you can not move there,please enter again\n");
        goto here;
    }

}

void pcmove(char arr[ROW][COL]) {
int x=0;
int y=0;
srand(time(NULL));
printf("computer move\n");
here:
x=rand()%3;
y=rand()%3;
if(arr[x][y]==' ') {
arr[x][y]='#';
print(arr);

}

else {
    goto here;
}

}

int isfull(char arr[ROW][COL]) {
for(int i=0; i<ROW; i++) {
for(int j=0; j<COL; j++) {
if(arr[i][j]=' ')
return 0;
}

}
return 1;

}

char iswin(char arr[ROW][COL]) {

for(int i=0; i<ROW; i++) {
    if(arr[i][0]==arr[i][1]&&arr[i][1]==arr[i][2]&&arr[i][0]!=' ')
        return arr[i][0];
}

for(int i=0; i<COL; i++) {
    if(arr[0][i]==arr[1][i]&&arr[1][i]==arr[2][i]&&arr[0][i]!=' ')
        return arr[0][i];
}

if(arr[0][0]==arr[1][1]&&arr[1][1]==arr[2][2]&&arr[0][0]!=' ') {
    return arr[0][0];
}

if(arr[2][0]==arr[1][1]&&arr[1][1]==arr[0][2]&&arr[2][0]!=' ') {
    return arr[2][0];
}
if(isfull(arr)==0)
    return 'c';
else
    return 'q';

}

int main() {
char board[ROW][COL];
boardinit(board);
print(board);
while(1) {
playermove(board);
if(iswin(board)!='c') {
if(iswin(board)=='*') {
printf("you are the winner");
break;
}

        if(iswin(board)=='#') {
            printf("computer are the winner");
            break;
        }
        if(iswin(board)=='q') {
            printf("no one is winning");
            break;
        }


    }

    pcmove(board);
    if(iswin(board)!='c') {
        if(iswin(board)=='*') {
            printf("you are the winner");
            break;
        }

        if(iswin(board)=='#') {
            printf("computer are the winner");
            break;
        }
        if(iswin(board)=='q') {
            printf("no one is winning");
            break;
        }


    }

}

return 0;

}

int isfull(char arr[ROW][COL]) {
for(int i=0; i<ROW; i++) {
for(int j=0; j<COL; j++) {
if(arr[i][j]=' ')
return 0;
}
你把判断写成赋值了
-=-=-=
你说你调试了,可是你是一步一步调试的吗,你断点跟了吗,跟进函数里面了吗
你只知道一个函数走完,数组就被清空了,那到底是哪一条语句清空的,你找到了吗
这种bug用眼睛看,要累死人,编译器在你手里,你要好好利用啊

谢谢大佬