关于#C语言#的问题,如何解决?

C语言中,使用二维数组、函数,进行井字棋游戏
用代码块功能插入代码,请勿粘贴截图
#include<stdio.h>
int main()
{
    int num[3][3]={};//定义数组
    int ret = 0;//为1时游戏结束 
    void painting( int num[][3] );//绘制函数 
    int ifs( int num[][3] );//判定游戏结束 
    int whichone( int num[][3] );//判定胜方 
    int a,b;//棋子坐标 
    int c,d;//实际数组坐标 
    int i=1;//第i轮 
    
    while(ret==0){
    painting( num );
    if(i%2){
    printf("本轮 X 方下,请输入坐标:");
    scanf("%d %d",&a,&b);//还应判定在棋盘内且之前没有下过 
    c=a-1;
    d=b-1;
    num[c][d]=1;
    }else{
    printf("本轮 O 方下,请输入坐标:");
    scanf("%d %d",&a,&b);
    c=a-1;
    d=b-1;
    num[c][d]=-1;
    }
    
    if( Ifs( num[3][3] ) ){
        ret=1;
        if( whichone( int num[3][3]  ) ){
            printf("恭喜X赢得比赛!"); 
        }else printf("恭喜O赢得比赛!"); 
    }
    
    }
    
    return 0;
}

void painting( int num[][3] )
{
    int i,j;
    int count=1;
    for(j=0;j<3;j++){
        for(i=0;i<3;i++){
            if(num[i][j]=-1){
                printf("O\t");
            }
            if(num[i][j]=0){
                printf("?\t");
            }
            if(num[i][j]=1){
                printf("X\t");
            }
            count++;
            if(count%3==0){
                printf("\n");
            }
        }
    }
}

int ifs( int num[][3] )
{
    int ret=0;
    int really[8]={};//1-34-67-8斜 
    int i;
    
    really[0]=num[0][0]+num[0][1]+num[0][2];
    really[1]=num[1][0]+num[1][1]+num[1][2];
    really[2]=num[2][0]+num[2][1]+num[2][2];
    
    really[3]=num[0][0]+num[1][0]+num[2][0];
    really[4]=num[0][1]+num[1][1]+num[2][1];
    really[5]=num[0][2]+num[1][2]+num[2][2];
    
    really[6]=num[0][0]+num[1][1]+num[2][2];
    really[7]=num[2][0]+num[1][1]+num[0][2];
    
    for(i=0;i<8;i++){
        if( really[i]==3 || really[i] ==-3 ){
            ret=1;
            break;
        }
    }
    return ret;
}

int whichone ( int num[][3] )
{
    int yoy=0;
    int really[8]={};//1-34-67-8斜 
    int i;
    
    really[0]=num[0][0]+num[0][1]+num[0][2];
    really[1]=num[1][0]+num[1][1]+num[1][2];
    really[2]=num[2][0]+num[2][1]+num[2][2];
    
    really[3]=num[0][0]+num[1][0]+num[2][0];
    really[4]=num[0][1]+num[1][1]+num[2][1];
    really[5]=num[0][2]+num[1][2]+num[2][2];
    
    really[6]=num[0][0]+num[1][1]+num[2][2];
    really[7]=num[2][0]+num[1][1]+num[0][2];
    
    for(i=0;i<8;i++){
        if(really[i]==3){
            yoy=1;
            break;
        }
        if(really[i]==-3){
            yoy=-1;
            break;
        }
    }
    
    return yoy; 
}
运行结果及报错内容 :[Error]expected expression before"int" 31行17列

img

我的解答思路和尝试过的方法 :①打印出棋盘,②判定当前下棋方,③赋对应位置的数组值,④判定游戏是否结束,若结束判定获胜方

我想了解关于二维数组在函数定义中的相关知识,报错时提示指针类型不同

无法运行是什麽状态???编译出错了?

@亖夕 你好,可以帮我看下这个代码吗

在代码中,第31行 whichone函数调用时,将 int 型的关键字作为了函数名的一部分,导致编译器无法识别,需要将 int 去掉即可。此外,在 painting 函数中,判断相等的语句应该使用双等号(==)而不是单等号(=)。

下面是修改后的代码:

#include<stdio.h>

int main()
{
    int num[3][3]={};//定义数组
    int ret = 0;//为1时游戏结束 
    void painting( int num[][3] );//绘制函数 
    int ifs( int num[][3] );//判定游戏结束 
    int whichone( int num[][3] );//判定胜方 
    int a,b;//棋子坐标 
    int c,d;//实际数组坐标 
    int i=1;//第i轮 

    while(ret==0){
        painting( num );
        if(i%2){
            printf("本轮 X 方下,请输入坐标:");
            scanf("%d %d",&a,&b);//还应判定在棋盘内且之前没有下过 
            c=a-1;
            d=b-1;
            num[c][d]=1;
        }else{
            printf("本轮 O 方下,请输入坐标:");
            scanf("%d %d",&a,&b);
            c=a-1;
            d=b-1;
            num[c][d]=-1;
        }

        if( ifs( num ) ){
            ret=1;
            if( whichone( num ) ){
                printf("恭喜X赢得比赛!"); 
            }else{
                printf("恭喜O赢得比赛!"); 
            }
        }

        i++;
    }

    return 0;
}

void painting( int num[][3] )
{
    int i,j;
    int count=1;
    for(j=0;j<3;j++){
        for(i=0;i<3;i++){
            if(num[i][j]==-1){
                printf("O\t");
            }
            if(num[i][j]==0){
                printf("?\t");
            }
            if(num[i][j]==1){
                printf("X\t");
            }
            count++;
            if(count%3==0){
                printf("\n");
            }
        }
    }
}

int ifs( int num[][3] )
{
    int ret=0;
    int really[8]={};//1-34-67-8斜 
    int i;

    really[0]=num[0][0]+num[0][1]+num[0][2];
    really[1]=num[1][0]+num[1][1]+num[1][2];
    really[2]=num[2][0]+num[2][1]+num[2][2];

    really[3]=num[0][0]+num[1][0]+num[2][0];
    really[4]=num[0][1]+num[1][1]+num[2][1];
    really[5]=num[0][2]+num[1][2]+num[2][2];

    really[6]=num[0][0]+num[1][1]+num[2][2];
    really