This is a C program for tic tac toe. It works fine but if you enter a character in your turn, it repeats for infinite time. I know I can't enter a character in %d but that's the task I've been given, that if someone enters a character it should not accept it, and asks for the turn again, like it does when I enter a number other than 1-9. HELP
#include<stdio.h>
#include<conio.h>
#include <cstdlib>
#include <string.h>
int main()
{
  int a, player, winner, row, column, line, go;
  char z;
  do
  {
    char name1[20];
    char name2[20];
    printf("\nEnter Player 1 name");
    scanf("%s", name1);
    printf("\nEnter Player 2 name");
    scanf("%s", name2);
    char board[3][3] =
        {
            {'1', '2', '3'},
            {'4', '5', '6'},
            {'7', '8', '9'}
        };
    winner = 0;
    for (a = 0; a < 9 && winner == 0; a++)
    {
      printf("\n\n");
      printf("\t %c | %c | %c \n", board[0][0], board[0][1], board[0][2]);
      printf("\t-----------\n");
      printf("\t %c | %c | %c \n", board[1][0], board[1][1], board[1][2]);
      printf("\t-----------\n");
      printf("\t %c | %c | %c \n", board[2][0], board[2][1], board[2][2]);
      player = a % 2 + 1;
      do
      {
        if (player == 1)
          printf("\nPlayer %s enter the number of square(from 1 to   9)", name1);
        else if (player == 2)
          printf("\nPlayer %s enter the number of square(from 1 to 9)", name2);
        scanf("      %d     ", &go);
        if (go > 0 && go < 10)
        {
          row = --go / 3;
          column = go % 3;
          break;
        }
      }
      while (go < 0 || go > 9 || board[row][column] > '9' || (go >= 'a' && go <= 'z') || (go >= 'Z' && go <= 'Z'));
      if (player == 1)
        board[row][column] = 'X';
      else
        board[row][column] = 'O';
      if ((board[0][0] == board[1][1] && board[0][0] == board[2][2]) ||
          (board[0][2] == board[1][1] && board[0][2] == board[2][0]))
      {
        winner = player;
      }
      else
      {
        for (line = 0; line < 3; line++)
        {
          if ((board[line][0] == board[line][1] && board[line][0] == board[line][2]) ||
              (board[0][line] == board[1][line] && board[0][line] == board[2][line]))
            winner = player;
        }
      }
    }
    if (winner == 0)
      printf("\nDRAW");
    printf("\n\n");
    printf("\t %c | %c | %c \n", board[0][0], board[0][1], board[0][2]);
    printf("\t-----------\n");
    printf("\t %c | %c | %c \n", board[1][0], board[1][1], board[1][2]);
    printf("\t-----------\n");
    printf("\t %c | %c | %c \n", board[2][0], board[2][1], board[2][2]);
    if (winner == 1)
      printf("player %s \n YOU WON !!!", name1);
    else if (winner == 2)
      printf("player %s \n YOU WON !!!", name2);
    printf("\nDo u want to repeat(Y/N)");
    z = getch();
    system("cls");
  }
  while (z == 'y' || z == 'Y');
  getch();
  return (0);
}
 
     
     
     
     
     
    