Stumped on an infinite loop
Ok guys, be nice. First time posting :)
I'm a programming amateur. Only learned up to arrays so, nothing advanced yet please. :)
For a programming exercise, were asked to make a tic tac toe program. Here's the way I wrote it.
Code:
#include <stdio.h>
#include <stdlib.h>
int checkDiag(int board[3][3])
{
if(board[1][1] == 0)
return 0;
if(board[1][1] == board[0][0] && board[1][1] == board[2][2])
return 1;
else if(board[1][1] == board[0][2] && board[1][1] == board[2][0])
return 1;
return 0;
}
int checkNondiag(int board[3][3])
{
int i, j, three = 1, check = 0;
for(i=0;i<3;i++)
if(board[i][i] == 0)
check++;
if(check == 3)
return 0;
for(i=0;i<3;i++)
{
three = 1;
for(j=1;j<3;j++)
{
if(board[i][0] == board[i][j])
three++;
}
if(three == 3)
return 1;
}
three = 1;
for(i=0;i<3;i++)
{
three = 1;
for(j=1;j<3;j++)
{
if(board[0][i] == board[i][j])
three++;
}
if(three == 3)
return 1;
}
return 0;
}
void gameboard(int board[3][3])
{
int i, j;
printf(" - - - \n|1|2|3|\n - - - \n|4|5|6|\n - - - \n|7|8|9|\n - - - \n\n");
printf(" - - - \n");
for(i=0;i<3;i++)
{
printf("|");
for(j=0;j<3;j++)
{
switch(board[i][j])
{
case 1: printf("X|");
break;
case 2: printf("O|");
break;
default: printf(" |");
}
}
printf("\n - - - \n");
}
}
int main(void)
{
int board[3][3] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
int turn = 0, move = 0, win = 0, p1 = 0, p2 = 0;
int i, j;
do
{
do
{
if(checkDiag(board) == 1 || checkNondiag(board) == 1)
switch(turn)
{
case 0: p2++;
break;
case 1: p1++;
break;
}
system("cls");
printf("TIC TAC TOE IN C\n\n");
gameboard(board);
if(checkDiag(board) == 1 || checkNondiag(board) == 1)
switch(turn)
{
case 0: p2++;
break;
case 1: p1++;
break;
}
printf("\nPlayer 1(X): %d\nPlayer 2(O): %d\n\n", p1, p2);
if(checkDiag(board) == 1 || checkNondiag(board) == 1)
switch(turn)
{
case 0: printf("Player 2 won!\n");
win = 1;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
board[i][j] = 0;
break;
case 1: printf("Player 1 won!\n");
win = 1;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
board[i][j] = 0;
break;
}
printf("Player %d's turn!\n", turn + 1);
printf("What space would you like to use? ");
while(move < 1 || move > 9)
{
scanf("%d", &move);
if( move < 1 || move > 9)
printf("Invalid coordinates. Please enter another: ");
}
switch(move)
{
case 1: board[0][0] = turn + 1;
break;
case 2: board[0][1] = turn + 1;
break;
case 3: board[0][2] = turn + 1;
break;
case 4: board[1][0] = turn + 1;
break;
case 5: board[1][1] = turn + 1;
break;
case 6: board[1][2] = turn + 1;
break;
case 7: board[2][0] = turn + 1;
break;
case 8: board[2][1] = turn + 1;
break;
case 9: board[2][2] = turn + 1;
break;
}
switch(turn)
{
case 0: turn = 1;
break;
case 1: turn = 0;
break;
}
}while(win == 0);
}while(p1 < 5 && p2 < 5);
}
Bear with me on the amateur-ish and inefficient coding.
May anyone tell me what's making it loop like that? and a solution?
And feel free to make suggestions to shorten my code. :) nothing to complicated, and only in C please. All the stuff I've used there is pretty much all that I've learned so far.