Tic Tac Toe C程序未正确执行

时间:2016-08-13 09:58:58

标签: c

我为两位球员写了两个功能。并且有一个功能可以检查获胜条件。程序正确执行,但它没有检测到有人获胜。所以检查功能一定有问题。

#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;
        }
    }
}

在指出后返回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;
}

如果尝试用数字替换字符而不是0而X使用8和9但是没有正确执行。

1 个答案:

答案 0 :(得分:2)

检查功能中的条件语句也存在一些问题。对于那个很抱歉。我对你的代码做了一些修改并测试了它,工作正常。

#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;
}

ETA:看看这段代码,在你尝试编译并运行它之前,你期望结果是什么?

int main(void)
{
    int a = 0;
    int b = 0;

    if (a == b == 0)
        fprintf(stdout, "Both are zero.\n");
    else
        fprintf(stdout, "both are not zero.\n");

    exit(EXIT_FAILURE);
}

可以这样想 - 条件被评估为真(1)或假(0)......在你脑中倒退:

if (a == b == 0)

现在,如果我们为a和b分配值0:

int a = 0, b = 0;

因此将评估条件:

b == 0

首先,b == 0部分,这是真的,我们知道b == 0,因为我们为它赋予了该值... byut现在解决第一个条件后的表达式是什么?

if (a == 1)

因为b == 0的计算结果为真(1),你看?

您可以这种方式进行作业:

int a = b = 0;

但不是条件表达式,因为它们是如何解决的。

希望这有帮助。