c - what is wrong with the logic of my program? -
what's wrong logic of program. reason, when alternate turns among player, moment hits 2nd turn, skip it, , game seems dragged 1 less step. array change, when declared above main function? placement tictactoe game
1 |2 | 3
4 | 5 | 6
6 | 8 | 9
code
#include <stdio.h> int check(char player); void move(char player); void outprint(void); char board[3][3] ; int main(void) { int first; char player1, player2; printf("player 1: choose symbol: \n"); player1 = getchar(); getchar(); printf("player 2: choose symbol: \n"); player2 = getchar(); getchar(); int i=0; int win; char turn; while(win == 0) { if((i%2) == 0){ turn = player1; move(player1); win = check(player1); outprint();} else { turn = player2; move(player2); win = check(player2); outprint();} i++; } if (i == 8) printf("its tie"); else printf("the winner %c", turn); return 0; } /*printing board takes in placement int*/ void outprint(void) { int r; printf("\n"); (r = 0; r < 3; r++){ printf(" %c | %c | %c \n" , board[r][0], board[r][2], board[r][3]); if (r != 2) printf("___________\n"); } printf("\n"); return; } /*check see if won*/ int check(char player) { int r, c; ( r = 0 ; r <3 ; r++) { if ((board[r][0] == player) && (board[r][1] == player) && (board[r][2] == player)) return 1; } ( c = 0 ; c <3 ; c++) { if ((board[0][c] == player) && (board[1][c] == player) && (board[2][c] == player)) return 1; } if((board[0][0] == player) && (board[1][1] == player) && (board[2][2] == player)) return 1; if((board[0][2] == player) && (board[1][1] == player) && (board[2][0] == player)) return 1; return 0; } void move(char player) { int place; printf("player %c, enter placement: \n", player); scanf("%d", &place); if (place == 1) board[0][0] = player; else if (place == 2) board[0][1] = player; else if (place == 3) board[0][2] = player; else if (place == 4) board[1][0] = player; else if (place == 5) board[1][1] = player; else if (place == 6) board[1][2] = player; else if (place == 7) board[2][0] = player; else if (place == 8) board[2][1] = player; else if (place == 9) board[2][2] = player; }
output
player 1: choose symbol: x player 2: choose symbol: o player x, enter placement: 1 x | | ___________ | | ___________ | | player o, enter placement: 2 x | | ___________ | | ___________ | | player x, enter placement: 3 x | x | ___________ | | ___________ | | player o, enter placement: 4 x | x | o ___________ o | | ___________ | | player x, enter placement: 5 x | x | o ___________ o | | ___________ | | player o, enter placement: 6 x | x | o ___________ o | o | ___________ | | player x, enter placement: 7 x | x | o ___________ o | o | x ___________ x | | winner x
try adding getchar() in scanf("%d", &place) in move() function did in first input entry:
void move(char player) { int place; printf("player %c, enter placement: \n", player); scanf("%d", &place); getchar();
Comments
Post a Comment