title: Tic Tac Toe using Binary Search Tree(C)
body: <p>I have implemented Tic Tac Toe using binary search tree in C.But,unfortunately it is not running.I am encountering a run time error like the </p>
  
  <blockquote>
    <p><strong>.exe file stopped working</strong>.</p>
  </blockquote>
  
  <p>On the other hand the code successfully compiled.
  It would be very grateful if somebody could point out the mistake.</p>
  
  <p>Here is the code:</p>
  
  <pre><code>#include&lt;stdio.h&gt;
  #include&lt;stdlib.h&gt;
  
  int x,win=0,gcursor=1,count=0,j=10;
  char ch;
  
  struct node
  {
      struct node *left;
      int cell;
      char data;
      struct node *right;
  };
  
  void insert(struct node **sr, int num)
  {
      if(*sr==NULL)
      {
          *sr = (struct node*)calloc(1,sizeof(struct node));
          (*sr)-&gt;left = NULL;
          (*sr)-&gt;cell = num;
          (*sr)-&gt;data = ' ';
          (*sr)-&gt;right = NULL;
      }
  
      else
      {
          if(num&lt;(*sr)-&gt;cell)
          insert(&amp;((*sr)-&gt;left),num);
          else
          insert(&amp;((*sr)-&gt;right),num);
      }
  }
  
  void inorder(struct node *t,int pos)
  {
      if(t!=NULL)
      {
          inorder(t-&gt;left,pos);
          if(t-&gt;cell==pos)
          {
          ch = t-&gt;data;
          return; 
          }
              inorder(t-&gt;right,pos);
      }
  }
  
  void display(struct node *t,int cursor)
  {
      char arr[10],i;
      system("cls");
      for(i=1;i&lt;=9;i++)
      {
          inorder(t,i);
          arr[i] = ch;
      }
      printf("\n\nTIC TAC TOE");
      if(cursor==1)
      printf("\n-------------\n| %c.| %c | %c |\n-------------\n| %c | %c | %c |\n-------------\n| %c | %c | %c |\n-------------\n",arr[1],arr[2],arr[3],arr[4],arr[5],arr[6],arr[7],arr[8],arr[9]);
      else if(cursor==2)
      printf("\n-------------\n| %c | %c.| %c |\n-------------\n| %c | %c | %c |\n-------------\n| %c | %c | %c |\n-------------\n",arr[1],arr[2],arr[3],arr[4],arr[5],arr[6],arr[7],arr[8],arr[9]);
      else if(cursor==3)
      printf("\n-------------\n| %c | %c | %c.|\n-------------\n| %c | %c | %c |\n-------------\n| %c | %c | %c |\n-------------\n",arr[1],arr[2],arr[3],arr[4],arr[5],arr[6],arr[7],arr[8],arr[9]);
      else if(cursor==4)
      printf("\n-------------\n| %c | %c | %c |\n-------------\n| %c.| %c | %c |\n-------------\n| %c | %c | %c |\n-------------\n",arr[1],arr[2],arr[3],arr[4],arr[5],arr[6],arr[7],arr[8],arr[9]);
      else if(cursor==5)
      printf("\n-------------\n| %c | %c | %c |\n-------------\n| %c | %c.| %c |\n-------------\n| %c | %c | %c |\n-------------\n",arr[1],arr[2],arr[3],arr[4],arr[5],arr[6],arr[7],arr[8],arr[9]);
      else if(cursor==6)
      printf("\n-------------\n| %c | %c | %c |\n-------------\n| %c | %c | %c.|\n-------------\n| %c | %c | %c |\n-------------\n",arr[1],arr[2],arr[3],arr[4],arr[5],arr[6],arr[7],arr[8],arr[9]);
      else if(cursor==7)
      printf("\n-------------\n| %c | %c | %c |\n-------------\n| %c | %c | %c |\n-------------\n| %c.| %c | %c |\n-------------\n",arr[1],arr[2],arr[3],arr[4],arr[5],arr[6],arr[7],arr[8],arr[9]);
      else if(cursor==8)
      printf("\n-------------\n| %c | %c | %c |\n-------------\n| %c | %c | %c |\n-------------\n| %c | %c.| %c |\n-------------\n",arr[1],arr[2],arr[3],arr[4],arr[5],arr[6],arr[7],arr[8],arr[9]);
      else if(cursor==9)
      printf("\n-------------\n| %c | %c | %c |\n-------------\n| %c | %c | %c |\n-------------\n| %c | %c | %c.|\n-------------\n",arr[1],arr[2],arr[3],arr[4],arr[5],arr[6],arr[7],arr[8],arr[9]);
      else
      printf("\n-------------\n| %c | %c | %c |\n-------------\n| %c | %c | %c |\n-------------\n| %c | %c | %c |\n-------------\n",arr[1],arr[2],arr[3],arr[4],arr[5],arr[6],arr[7],arr[8],arr[9]);
  }
  
  
  void winner(struct node *t)
  {
      int arr[][3] = {{1,2,3},{4,5,6},{7,8,9},{1,5,9},{3,5,7},{1,4,7},{2,5,8},{3,6,9}};
      int i;
      char x1,y1,z1;
      win = 0;
      for(i=0;i&lt;=7;i++)
      {
          inorder(t,arr[i][0]); x1 = ch;
          inorder(t,arr[i][1]); y1 = ch;
          inorder(t,arr[i][2]); z1 = ch;
          if(x1==y1 &amp;&amp; y1==z1 &amp;&amp; x1!=' ' &amp;&amp; y1!=' ' &amp;&amp; z1!=' ')
          { win = 1;break;}
      }
  }
  
  void check(struct node *t,int pos,char c,char c2)
  {   
  
          if(t!=NULL)
      {
          check(t-&gt;left,pos,c,c2);
          if(t-&gt;cell==pos &amp;&amp; t-&gt;data==' ' &amp;&amp; c==c2)
          {
          t-&gt;data = c;
          count = 1;
          return; 
          }
          check(t-&gt;right,pos,c,c2);
      }
  }
  
  
  void human_being(struct node *t, char human)
  {
      char c;
      count = 0;
      while(count&lt;1)
      {
          if(gcursor==10)
          gcursor = 1;
  
          display(t,gcursor);
          scanf("%c",&amp;c);
  
          if(c=='\n')
          gcursor++;
  
          else
          check(t,gcursor,c,human);
          j++;
      }
  }
  
  void computer(struct node *t, char comp)
  {
      int random,k;
      char c;
      count = 0;
      while(count&lt;1)
      {
          k = rand()%j++;
          if(k!=0)
          {
          random = rand()%k;
          gcursor = random;
          }
          check(t,gcursor,comp,comp); 
      }
  }
  
  
  void main()
  {
      char human,comp;
      struct node *t;
      int i,arr[] = {5,3,4,2,1,7,6,8,9};
      for(i=0;i&lt;9;i++)
      insert(&amp;t,arr[i]);
      printf("\n\n------------------------------RULES-----------------------------\n1. Press ENTER to move the cursor '.' around the squares.\n2. Press X or O as per your choice and then again press enter.\n3. X or O should be in capital.");
      printf("\n\n\n------------------------CONFIGURATION-------------------------\n1. Enter O and press enter if you want to start first.\n2. Enter X and press enter if you want computer to start first.\nEnter your choice :- ");
      scanf("%c",&amp;human);
      if(human=='O')
      comp = 'X';
      else if(human=='X')
      comp = 'O';
  
  
  
                  if(human=='O')
                  for(i=1;i&lt;=9;i++)
                  {
                      if(i%2!=0)
                      {
                      human_being(t,human);
                      winner(t);
                      if(win==1)
                      {display(t,0); printf("\nGame Over....Winner Is Human Being."); break; }
                      }
                      else
                      {
                      computer(t,comp);
                      winner(t);
                      if(win==1)
                      { display(t,0); printf("\nGame Over....Winner Is Computer."); break; }
                      }
                  }
  
                  else if(human=='X')
                  for(i=1;i&lt;=9;i++)
                  {
                      if(i%2==0)
                      {
                      human_being(t,human);
                      winner(t);
                      if(win==1)
                      { display(t,0); printf("\nGame Over....Winner Is Human Being."); break; }
                      }
                      else
                      {
                      computer(t,comp);
                      winner(t);
                      if(win==1)
                      { display(t,0); printf("\nGame Over....Winner Is Computer."); break; }
                      }
                  }
  
                  if(win==0)
                  {display(t,0); printf("\nGame Over....Match Draw.");
      }
  getch();
  }
  </code></pre>
  
  <p>Any help would be appreciated.</p>