Fiz este programa, que executa normalmente até a opção de pesquisa de array, quando ele trava. O que há de errado?   
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define TAM 100
void lerArray(int[],int);
void ordenaArray(int[],int);
int pesquisaArray(int[],int,int);
    int a[TAM];
main()
{
      int fim=0,opcao,tam,elemento,pesquisa,pos;
      int chave1=0;
      while(!fim)
      {
      system("cls");
      printf("Programa de pesquisa binaria em arrays\n"
             "Escolha uma opcao:\n\n"
             "1. Ler array\n"
             "2. Pesquisar elemento no array\n"
             "3. Sair\n");
             
      scanf("%d",&opcao);
      
         switch(opcao)
         {
                   case 1:
                        {
                           printf("Qual o tamanho do array?\n");
                           scanf("%d",&tam);
                           while(tam<1||tam>TAM)
                           {
                            system("cls");
                            printf("O array deve ter entre um e %d elementos.\n"
                                   "Quantos elementos havera no array?\n",TAM);
                            scanf("%d",&tam);
                           }
                           int a[tam];
                           lerArray(a,tam);
                           ordenaArray(a,tam);
                           chave1=1;
                        }
                        break;
                   
                   case 2:
                        {     if(chave1==1)
                              {
                              printf("Que elemento sera pesquisado?\n");
                              scanf("%d",&elemento);
                              pesquisa = pesquisaArray(a,pos,elemento);
                              
                              if(pesquisa==0)
                              printf("O elemento %d foi encontrado na posicao %d.\n",elemento,pos);
                              
                              if(pesquisa==1)
                              printf("O elemento não foi encontrado!\n");
                              }
                              
                              else
                              printf("Leia um array antes!\n");    
                        }
                        break;
                   
                   case 3:
                        fim=1;
                        break;
                        
                   default:
                           printf("Digite 1, 2 ou 3!\n");
                           break;
         }
      getch();
      }  
      }
      
      void lerArray(int a[], int tam)
      {      int i;
            printf("Digite os termos, separados por enter ou espaco:\n ");  /*Impressão do pedido de entrada pelo teclado*/
            for(i=0;i<tam;i++)                  /* lerArray usa um for para receber pelo teclado os valores do array, de entrada[0]*/
                    scanf("%d",&a);    /*até entrada[tam]*/
      }
      
      void ordenaArray(int a[],int tam)
     {    
          int passo,aux,cont;
          
          for (passo=1;passo<tam;passo++)
          {
              for(cont=0;cont<tam-passo;cont++)
              {
                if(a[cont]>a[cont+1])
                {
                aux=a[cont];
                a[cont]=a[cont+1];
                a[cont+1]=aux;
                }
          }
          }
          }
          
     int pesquisaArray(int a[],int pos,int elemento)
     {   int tam;
         int inf=0,sup=tam-1,meio;
         
         meio=(inf+sup)/2;
         
         if(a[meio]==elemento)
         {
               pos=meio;
               return 0;
         }
         
         else if(a[meio]<elemento)
           return pesquisaArray(a,meio+1,elemento);
           
         else
           return pesquisaArray(a,meio-1,elemento);
           
         return 1;
     }