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

Popular posts from this blog

c# - Send Image in Json : 400 Bad request -

javascript - addthis share facebook and google+ url -

ios - Show keyboard with UITextField in the input accessory view -