Tic Tac Toe C程序未正确执行

Tic Tac Toe C程序未正确执行,c,C,我为两个播放器编写了两个函数。和一个检查获胜条件的功能。程序执行正确,除非它没有检测到有人赢了。所以check函数肯定有问题 #include<stdio.h> int P1(int, char []), P2(int, char []), check( int, char []); int main() { char a[10]= "---------" ; int flag= 3, p, q; while( flag== 3) {

我为两个播放器编写了两个函数。和一个检查获胜条件的功能。程序执行正确,除非它没有检测到有人赢了。所以check函数肯定有问题

#include<stdio.h>
int P1(int, char []), P2(int, char []), check( int, char []);
int main()
{
    char a[10]= "---------" ;
    int flag= 3, p, q;
    while( flag== 3)
    {   
        P1( p, a);  
        check( flag, a); 
        if( flag== 1)
        {   printf("P1 WINS");}
        else
        {
            P2( q, a);
            check( flag, a);
            if( flag== 2)
            {printf("P2 WINS");}
        }
    }
return 0;}

int P1(int p, char a[10])
{
    printf("P1: Which position?\n");
    scanf("%d", &p);
    a[p-1]= 'X';
    printf("%c %c %c\n%c %c %c\n%c %c %c\n", a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);return 0;
}

int P2(int q, char a[10])
{   
    printf("P2: Which position?\n");
    scanf("%d", &q);
    a[q-1]= '0';
    printf("%c %c %c\n%c %c %c\n%c %c %c\n", a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);return 0;
}

int check( int flag, char a[10])//isme galti hai
{
    if( a[0]==a[1]==a[2]=='X' ||
        a[3]==a[4]==a[5]=='X' ||
        a[6]==a[7]==a[8]=='X' ||
        a[0]==a[3]==a[6]=='X' ||
        a[1]==a[4]==a[7]=='X' ||
        a[2]==a[5]==a[8]=='X' ||
        a[0]==a[4]==a[8]=='X' ||
        a[2]==a[4]==a[6]=='X' )

    {
        flag= 1;
    }

    else 

    {
        if( a[0]==a[1]==a[2]=='0' ||
            a[3]==a[4]==a[5]=='0' ||
                a[6]==a[7]==a[8]=='0' ||
                a[0]==a[3]==a[6]=='0' ||
                a[1]==a[4]==a[7]=='0' ||
                a[2]==a[5]==a[8]=='0' ||
                a[0]==a[4]==a[8]=='0' ||
                a[2]==a[4]==a[6]=='0' )

        {
            flag= 2;
        }
    }
}
#包括
int P1(int,char[])、P2(int,char[])、check(int,char[]);
int main()
{
字符a[10]=“-----------”;
int标志=3,p,q;
while(标志==3)
{   
P1(p,a);
检查(标志,a);
如果(标志==1)
{printf(“P1赢”);}
其他的
{
P2(q,a);
检查(标志,a);
如果(标志==2)
{printf(“P2赢”);}
}
}
返回0;}
int P1(int p,字符a[10])
{
printf(“P1:哪个位置?\n”);
scanf(“%d”和“p”);
a[p-1]=“X”;
printf(“%c%c%c\n%c%c%c\n%c%c%c\n”,a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8]);返回0;
}
int P2(int q,字符a[10])
{   
printf(“P2:哪个位置?\n”);
scanf(“%d”和“&q”);
a[q-1]=“0”;
printf(“%c%c%c\n%c%c%c\n%c%c%c\n”,a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8]);返回0;
}
整数检查(整数标志,字符a[10])//isme galti hai
{
如果(a[0]==a[1]==a[2]==X'||
a[3]==a[4]==a[5]=='X'||
a[6]==a[7]==a[8]='X'||
a[0]==a[3]==a[6]=='X'||
a[1]==a[4]==a[7]=='X'||
a[2]==a[5]==a[8]='X'||
a[0]==a[4]==a[8]=='X'||
a[2]==a[4]==a[6]==X')
{
flag=1;
}
其他的
{
如果(a[0]==a[1]==a[2]==0'||
a[3]==a[4]==a[5]==0'||
a[6]==a[7]==a[8]='0'||
a[0]==a[3]==a[6]==0'||
a[1]==a[4]==a[7]='0'||
a[2]==a[5]==a[8]='0'||
a[0]==a[4]==a[8]==0'||
a[2]==a[4]==a[6]==0')
{
flag=2;
}
}
}
返回所指出的flag值后,它仍然不起作用

   #include<stdio.h>
int P1(int, char []), P2(int, char []), check( int, char []);
int main()
{
    char a[10]= "---------" ;
    int flag= 3, p, q;
    while( flag== 3)
    {   
        P1( p, a);  
        flag= check( flag, a); 
        if( flag== 1)
        {   printf("P1 WINS");}
        else
        {
            P2( q, a);
            flag= check( flag, a);
            if( flag== 2)
            {printf("P2 WINS");}
        }
    }
return 0;}

int P1(int p, char a[10])
{
    printf("P1: Which position?\n");
    scanf("%d", &p);
    a[p-1]= 'X';
    printf("%c %c %c\n%c %c %c\n%c %c %c\n", a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);return 0;
}

int P2(int q, char a[10])
{   
    printf("P2: Which position?\n");
    scanf("%d", &q);
    a[q-1]= '0';
    printf("%c %c %c\n%c %c %c\n%c %c %c\n", a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);return 0;
}

int check( int flag, char a[10])//isme galti hai
{   
    if( a[0]==a[1]==a[2]=='X' ||
        a[3]==a[4]==a[5]=='X' ||
        a[6]==a[7]==a[8]=='X' ||
        a[0]==a[3]==a[6]=='X' ||
        a[1]==a[4]==a[7]=='X' ||
        a[2]==a[5]==a[8]=='X' ||
        a[0]==a[4]==a[8]=='X' ||
        a[2]==a[4]==a[6]=='X' )

    {
        flag= 1;
    }

    else 

    {
        if( a[0]==a[1]==a[2]=='0' ||
            a[3]==a[4]==a[5]=='0' ||
                a[6]==a[7]==a[8]=='0' ||
                a[0]==a[3]==a[6]=='0' ||
                a[1]==a[4]==a[7]=='0' ||
                a[2]==a[5]==a[8]=='0' ||
                a[0]==a[4]==a[8]=='0' ||
                a[2]==a[4]==a[6]=='0' )

        {
            flag= 2;
        }
    }
    return flag;
}
#包括
int P1(int,char[])、P2(int,char[])、check(int,char[]);
int main()
{
字符a[10]=“-----------”;
int标志=3,p,q;
while(标志==3)
{   
P1(p,a);
标志=检查(标志,a);
如果(标志==1)
{printf(“P1赢”);}
其他的
{
P2(q,a);
标志=检查(标志,a);
如果(标志==2)
{printf(“P2赢”);}
}
}
返回0;}
int P1(int p,字符a[10])
{
printf(“P1:哪个位置?\n”);
scanf(“%d”和“p”);
a[p-1]=“X”;
printf(“%c%c%c\n%c%c%c\n%c%c%c\n”,a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8]);返回0;
}
int P2(int q,字符a[10])
{   
printf(“P2:哪个位置?\n”);
scanf(“%d”和“&q”);
a[q-1]=“0”;
printf(“%c%c%c\n%c%c%c\n%c%c%c\n”,a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8]);返回0;
}
整数检查(整数标志,字符a[10])//isme galti hai
{   
如果(a[0]==a[1]==a[2]==X'||
a[3]==a[4]==a[5]=='X'||
a[6]==a[7]==a[8]='X'||
a[0]==a[3]==a[6]=='X'||
a[1]==a[4]==a[7]=='X'||
a[2]==a[5]==a[8]='X'||
a[0]==a[4]==a[8]=='X'||
a[2]==a[4]==a[6]==X')
{
flag=1;
}
其他的
{
如果(a[0]==a[1]==a[2]==0'||
a[3]==a[4]==a[5]==0'||
a[6]==a[7]==a[8]='0'||
a[0]==a[3]==a[6]==0'||
a[1]==a[4]==a[7]='0'||
a[2]==a[5]==a[8]='0'||
a[0]==a[4]==a[8]==0'||
a[2]==a[4]==a[6]==0')
{
flag=2;
}
}
返回标志;
}

If尝试用数字替换字符,而不是0和X使用8和9,但执行不正确。

检查函数中的条件语句也有一些问题。很抱歉。我对你的代码做了一些修改并进行了测试,工作正常

#include<stdio.h>
int P1(int, char []), P2(int, char []), check( int, char []);
int main()
{
    char a[10]= "---------" ;
    int flag= 3, p, q;
    while( flag== 3)
    {   
        P1( p, a);  
        flag= check( flag, a); 
        if( flag== 1)
        {   printf("P1 WINS");}
        else
        {
            P2( q, a);
            flag= check( flag, a);
            if( flag== 2)
            {printf("P2 WINS");}
        }
    }
return 0;}

int P1(int p, char a[10])
{
    printf("P1: Which position?\n");
    scanf("%d", &p);
    a[p-1]= 'X';
    printf("%c %c %c\n%c %c %c\n%c %c %c\n", a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);return 0;
}

int P2(int q, char a[10])
{   
    printf("P2: Which position?\n");
    scanf("%d", &q);
    a[q-1]= '0';
    printf("%c %c %c\n%c %c %c\n%c %c %c\n", a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);return 0;
}

int check( int flag, char a[10])//isme galti hai
{   
    if( 
    (a[0]== 'X' && a[1]== 'X' && a[2]=='X') ||
    (a[3]== 'X' && a[4]== 'X' && a[5]=='X') ||
    (a[6]== 'X' && a[7]== 'X' && a[8]=='X') ||
    (a[0]== 'X' && a[3]== 'X' && a[6]=='X') ||
    (a[1]== 'X' && a[4]== 'X' && a[7]=='X') ||
    (a[2]== 'X' && a[5]== 'X' && a[8]=='X') ||
    (a[0]== 'X' && a[4]== 'X' && a[8]=='X') ||
    (a[2]== 'X' && a[4]== 'X' && a[6]=='X'))
    {
        flag= 1;
    }

    else 

    {
        if( 
    (a[0]== '0' && a[1]== '0' && a[2]=='0') ||
    (a[3]== '0' && a[4]== '0' && a[5]=='0') ||
    (a[6]== '0' && a[7]== '0' && a[8]=='0') ||
    (a[0]== '0' && a[3]== '0' && a[6]=='0') ||
    (a[1]== '0' && a[4]== '0' && a[7]=='0') ||
    (a[2]== '0' && a[5]== '0' && a[8]=='0') ||
    (a[0]== '0' && a[4]== '0' && a[8]=='0') ||
    (a[2]== '0' && a[4]== '0' && a[6]=='0'))

        {
            flag= 2;
        }
    }
    return flag;
}
请这样想-条件的评估结果为真(1)或假(0)…在您的头脑中向后执行:

if (a == b == 0)
现在,如果我们给a和b赋值为0:

int a = 0, b = 0;
将对条件进行评估,从而:

b == 0
首先,b==0部分,这是真的,我们知道b==0,因为我们给它赋了那个值…但是现在,在第一个条件被解析后,表达式是什么

if (a == 1)
因为b==0的计算结果为真(1),所以您看到了吗

您可以通过以下方式完成作业:

int a = b = 0;
但不是条件表达式,因为它们是如何解析的


希望这有帮助。

请说明问题的确切内容。说check函数有问题不是问题。另外,请添加到目前为止您为修复函数所做的操作。这可能是一个家庭作业问题。您希望使用调试器跟踪代码以了解实际情况。我不知道如何执行此操作。欢迎使用堆栈溢出。请注意,在这里说“谢谢”的首选方式是投票选出好的问题和有用的答案(一旦你有足够的声誉这么做),并接受对你提出的任何问题最有用的答案(这也会给你的声誉带来一点提升)。请查看页面,我也编辑了代码并返回了标志。新的代码和原来的代码一起在我的问题中。酷-它解决了问题吗?不。它以相同的方式执行。现在可以工作了,希望这有帮助-你不应该太难弄清楚我所做的更改发生了什么。是的,它工作了!但是,早期编写条件的方法有什么问题?
int a = b = 0;