The old woman's game in C. The program ends before

0

I'm trying to make a game of the old language in C but in the first move of player 1 depending on where to put the 'X' the program already ends declaring the player one as a winner. Here is my code:

#include <stdio.h>
#include <string.h>
int main(){
    int x, y, cont;
    char m[3][3], velha[3][3];
    for(x=0; x<3; x++){
        for(y=0; y<3; y++){
            m[x][y]='.';
        }

    }
    for(x=0; x<3; x++){
        for(y=0; y<3; y++){
            printf("%c\t", m[x][y]);
        }
        printf("\n");
    }



        while(cont<9){

        if(cont%2==0){
            printf("Jogador 1\n");
            printf("Digite qual a linha preencher ");
            scanf("%d", &x);
            printf("Digite qual coluna preencher");
            scanf("%d", &y);
            m[x][y]='X';
            velha[x][y]='X';

            if(velha[0][0]==velha[1][1] && velha[1][1]==velha[2][2]  || 
            velha[0][0]==velha[0][1]&& velha[0][1]==velha[0][2] || 
            velha[1][0]==velha[1][1] && velha[1][1]==velha[1][2] ||
             velha[2][0]==velha[2][1] && velha[2][1]==velha[2][2]||
         velha[0][0]==velha[1][0] && velha[1][0]==velha[2][0] || 
             velha[0][1]==velha[1][1] && velha[1][1]==velha[1][2] || 
            velha[0][2]==velha[1][2] && velha[1][2]==velha[2][2] || velha[0][2]==velha[1][1] && velha[1][1]==velha[3][0] ){
                printf("Jogador 1 venceu \n");
                cont=10;
            }



        }

            else if(cont%2!=0){
            printf("Jogador 2\n");
            printf("Digite qual linha preencher ");
            scanf("%d", &x);
            printf("Digite qual coluna preencher ");
            scanf("%d", &y);
            m[x][y]='0';
            velha[x][y]='0';
            if(velha[0][0]==velha[1][1] && velha[1][1]==velha[2][2]  || 
            velha[0][0]==velha[0][1]&& velha[0][1]==velha[0][2] || 
            velha[1][0]==velha[1][1] && velha[1][1]==velha[1][2] ||
             velha[2][0]==velha[2][1] && velha[2][1]==velha[2][2]||
         velha[0][0]==velha[1][0] && velha[1][0]==velha[2][0] || 
             velha[0][1]==velha[1][1] && velha[1][1]==velha[1][2] || 
            velha[0][2]==velha[1][2] && velha[1][2]==velha[2][2] || velha[0][2]==velha[1][1] && velha[1][1]==velha[3][0] ){
                printf("Jogador 2 venceu \n");
                cont=10;
            }
        }
        cont++;
        for(x=0; x<3; x++){
            for(y=0; y<3; y++){
            printf("%c\t", m[x][y]);
        }
        printf("\n");
    }
}
if(cont==9){
    printf("Nao teve vencedores ");

}












}
    
asked by anonymous 14.06.2017 / 23:15

1 answer

3

The variable cont had not been started and its if was very wrong. I fixed it for you, just copy and paste. I also recommend doing a check function, so that the condition is not so great.

#include <stdio.h>
#include <string.h>
void pedirechecar();
int main(){
    int x, y;
    int cont = 0;
    char m[3][3], velha[3][3];
    for(x=0; x<3; x++){
        for(y=0; y<3; y++){
            m[x][y]='.';
        }

    }
    for(x=0; x<3; x++){
        for(y=0; y<3; y++){
            printf("%c\t", m[x][y]);
        }
        printf("\n");
    }



        while(cont<9){

        if(cont%2==0){
            printf("Jogador 1\n");
            pedirechecar();
            m[x][y]='X';
            velha[x][y]='X';

            if((velha[0][0]=="X" && velha[1][1]=="X" && velha[2][2]=="X") || 
            (velha[0][0]=="X" && velha[0][1]=="X" && velha[0][2]=="X") || 
            (velha[1][0]=="X" && velha[1][1]=="X" && velha[1][2]=="X") ||
            (velha[2][0]=="X" && velha[2][1]=="X" && velha[2][2]=="X") ||
            (velha[0][0]=="X" && velha[1][0]=="X" && velha[2][0]=="X") || 
            (velha[0][1]=="X" && velha[1][1]=="X" && velha[1][2]=="X") || 
            (velha[0][2]=="X" && velha[1][2]=="X" && velha[2][2]=="X") || 
            (velha[0][2]=="X" && velha[1][1]=="X" && velha[3][0]=="X")){
                printf("Jogador 1 venceu \n");
                cont=10;
            }



        }

            else if(cont%2!=0){
            printf("Jogador 2\n");
            pedirechecar();
            m[x][y]='0';
            velha[x][y]='0';
         if((velha[0][0]=="X" && velha[1][1]=="X" && velha[2][2]=="X") || 
            (velha[0][0]=="X" && velha[0][1]=="X" && velha[0][2]=="X") || 
            (velha[1][0]=="X" && velha[1][1]=="X" && velha[1][2]=="X") ||
            (velha[2][0]=="X" && velha[2][1]=="X" && velha[2][2]=="X") ||
            (velha[0][0]=="X" && velha[1][0]=="X" && velha[2][0]=="X") || 
            (velha[0][1]=="X" && velha[1][1]=="X" && velha[1][2]=="X") || 
            (velha[0][2]=="X" && velha[1][2]=="X" && velha[2][2]=="X") || 
            (velha[0][2]=="X" && velha[1][1]=="X" && velha[3][0]=="X")){
                printf("Jogador 2 venceu \n");
                cont=10;
            }
        }
        cont++;
        for(x=0; x<3; x++){
            for(y=0; y<3; y++){
            printf("%c\t", m[x][y]);
        }
        printf("\n");
    }
}
if(cont==9){
    printf("Nao teve vencedores ");

}
}

void pedirechecar(){
    printf("Digite qual linha preencher ");
    scanf("%d", &x);
    printf("Digite qual coluna preencher ");
    scanf("%d", &y);
    if (velha[x][y] == "X")
    {
        printf ("Esse lugar já está marcado!");
        pedirechecar();
    }
}

To check if it is already filled you can do an if like this:

if (velha[x][y] == "X")
{
    printf ("Esse lugar já está marcado!");
}
    
15.06.2017 / 01:31