Sto scrivendo questo programmino, ma mi va in Segmentation Fault, qualche idea? Il problema dovrebbe stare nel ciclo while..però non so dove posso aver sbagliato..??

codice:
#include<stdio.h> #include<stdlib.h> #include<time.h>  void card(int wDeck[4][13], const char *wFace[], const char *wSuit[], int cost); void raise(int num);  int main () {  const char *suit[ 4 ] = { "Hearts", "Diamonds", "Clubs", "Spades" };  const char *face[ 13 ] = {"Ace", "Deuce", "Three", "Four",           "Five", "Six", "Seven", "Eight",          "Nine", "Ten", "Jack", "Queen", "King" };  int a = 1; int i, z; int choice; int valore = 0; int puntata = 0;  int deck [ 4 ][ 13 ] = { 0 };  for( i = 0 ; i < 4 ; i++ ) {     for( z = 0 ; z < 13 ; z++ ) {        deck[i][z] = a;       if( z <= 8 ) {      a++;         }        if( z == 12 ) {             a = 1;              }   }  }  printf("Black Jack v0.1\n");    printf("Premi:\n 1. Per una carta\n 2. Per alzare la puntata\n 3. Per mostrare la puntata e le carte 4. Per uscire\n"); scanf("%d",&choice);  while(choice != 4 ) { if(choice == 1) {   card(deck,face,suit,valore);  }  else if (choice == 2) {  raise( puntata);  }  else if (choice == 3 ) {  printf("money: %d e carte: %d\n",puntata,valore);  }  printf("What do you want to do ?\n"); scanf("%d", choice);  } printf("Program execution completed\n");  return 0;  }   void card(int wDeck[4][13], const char *wFace[], const char *wSuit[], int cost) {   int row;  int column;  int i,z;  srand( time( NULL ) );  row = rand() % 4;  column = rand() % 13;   printf(" %5s of %-8s\n",wSuit[row], wFace[column]);  cost = cost + wDeck[row][column];  printf("%d",cost);  }  void raise( int num) {  int scommessa;   printf(" Quanto vuoi scommettere?\n"); scanf("%d",&scommessa);  num = num + scommessa;  }