I'm having this error but can't understand why. It's related to this portion of the code.
#include <stdio.h>
#include <stdlib.h>
#define x 'X'
#define o 'O'
void Linha()
{
int i = 0;
while(i++<8)
printf("_");
printf("\n");
}
void Coluna(char a[][3],int n)
{
int i;
for(i=0; i<=2; i++)
{
if(i!=2)
printf("%c |", a[n][i]);
else
printf("%c", a[n][i]);
}
printf("\n");
}
void Most(char a[][3])
{
int i = 0;
Coluna(a,i++);
Linha();
Coluna(a,i++);
Linha();
Coluna(a,i);
}
int Cheio(char a[][3])
{
int i = 0;
int j = 0;
int n = 0;
for(i=0; i<3; i++)
{
for(j= 0; j<3; j++)
{
if(a[i][j] != ' ')
{
n++;
}
}
}
return n;
}
int LinhasV(char a[][3],char c)
{
int i = 0;
int j = 0;
int n = 0;
for(i=0; i<3; i++)
{
if(n==3)
return n;
n = 0;
for(j= 0; j<3; j++)
{
if(a[i][j] == c)
{
n++;
}
}
}
return n;
}
int ColunasV(char a[][3],char c)
{
int i = 0;
int j = 0;
int n = 0;
for(j=0; i<3; j++)
{
if(n==3)
return n;
n = 0;
for(i= 0; j<3; i++)
{
if(a[i][j] == c)
{
n++;
}
}
}
return n;
}
int DiagonalV(char a[][3], char c)
{
int n = 0;
if(a[0][0] == c && a[1][1] == c && a[2][2] == c)
{
return 1;}
if(a[2][0] == c && a[1][1] == c && a[0][2] == c){
return 1;}
return 0;
}
int Owin(char a[][3])
{
if(DiagonalV(a, o) && ColunasV(a, o) && LinhasV(a, o))
return 1;
return 0;
}
int Xwin(char a[][3])
{
if(DiagonalV(a, x) && ColunasV(a, x) && LinhasV(a, x))
return 1;
return 0;
}
int livre(char a[][3],int x1, int x2)
{
if(a[x1][x2] != ' ')
return 0;
return 1;
}
void Jogar(char a[][3],int x1, int x2)
{
if(x1>=0 && x1<3 && x2>=0 && x2<3 && livre(a,x1,x2))
{
a[x1][x2] = x;
return;
}
scanf("%d %d", &x1, &x2);
Jogar(a, x1, x2);
}
int teste(int a)
{
if(a>0)
return 1;
return 0;
}
int main()
{
int x1,y1;
char tab[3][3] = {{' ',' ',' '},{' ', ' ',' '},{' ', ' ',' '}};
Most(tab);
Most(tab);
//printf("%d\n", Xwin(tab));
//printf("\n\n X: DiagonalV:%d && ColunasV:%d && LinhasV:%d", DiagonalV(tab, x) , ColunasV(tab, x) , LinhasV(tab, x));
while(1)
{
int xx = DiagonalV(tab, x);<-- (#define x 'X')
printf("%d", xx);
if(xx == 2)<--- Here's the error but why?
{
break;
}
Jogar(tab, 99,99);
Most(tab);
}
printf("xD\n");
Jogar(tab, 99,99);
Most(tab);
}
if(Cheio(tab) == 9)
printf("EMPATE\n");
if(Owin(tab))
printf("Derrota\n");
if(Xwin(tab))
printf("Vitoria\n");
Most(tab);
return 0;
}
Basicly it verifies if the diagonal as 3 of the same char if yes return 2 else return 5. If i try to verify if is 5 or 2 it gives me a core dump.
Aucun commentaire:
Enregistrer un commentaire