I am new to the C language and I know there are a few Q&A out there about program crashes, but I think in this case my one is a bit specific and would prefer to make the question. I am attempting a Poker game and after running the program it crashes after I enter the "Y" or "N" command. I would appreciate any insights on how to solve this. Here's the code:
#include <stdio.h>
#include <time.h>
#include <ctype.h>
#include <stdlib.h>
#define FALSE 0
#define TRUE 1
void printGreeting();
int getBet();
char getSuit(int suit);
char getRank(int rank);
void getFirstHand(int cardRank[], int cardSuit[]);
void getFinalHand(int cardRank[], int cardSuit[], int finalRank[],
                  int finalSuit[], int ranksinHand[],
                  int suitsinHand[]);
int analyzeHand(int ranksinHand[], int suitsinHand[]);
main(void) {
    int bet;
    int bank = 100;
    int i;
    int cardRank[5];
    int cardSuit[5];
    int finalRank[5];
    int finalSuit[5];
    int ranksinHand[13];
    int suitsinHand[4];
    int winnings;
    time_t t;
    char suit, rank, stillPlay;
    //print greeting
    printGreeting();
    // plays a new hand of draw poker
    do {
        bet = getBet();
        srand(time(&t));
        getFirstHand(cardRank, cardSuit);
        printf("Your five cards: \n");
        for (i=0; i<5; i++) {
            suit = getSuit(cardSuit[i]);
            rank = getRank(cardRank[i]);
            printf("Card #%d: %c%c\n", i+1, rank, suit);
        }
        for (i=0; i<4; i++) {
            suitsinHand[i] = 0;
        }
        for (i=0; i<13; i++) {
            ranksinHand[i] = 0;
        }
        getFinalHand(cardRank, cardSuit, finalRank, finalSuit,
                     ranksinHand, suitsinHand);
        printf("Your final five cards: \n");
        for (i = 0; i < 5; i++) {
            suit = getSuit(finalSuit[i]);
            rank = getRank(finalRank[i]);
            printf("Card #%d: %c%c\n", i+1, rank, suit);
        }
        winnings = analyzeHand(ranksinHand, suitsinHand);
        printf("You won %d!\n", bet*winnings);
        bank = bank - bet + (bet*winnings);
        printf("\nYour bank is now %d.\n", bank);
        printf("\nDo you want to play again? ");
        scanf(" %c", &stillPlay);
    } while (toupper(stillPlay) == 'Y');
    return 0;
}
/******************************************************************/
// Print a quick greeting as well as tell the users the value
// of different winning hands
void printGreeting() {
    printf("Here are the rules: \n");
    printf("You start with 100 credits, and you make a bet from ");
    printf("1 to 5 credits. \n");
    printf("You are dealt 5 cards, and then you choose which ");
    printf("cards to keep ");
    printf("or discard.\n");
    printf("You want to make the best possible hand. \n");
    printf("\nHere is the table for winnings (assuming a ");
    printf("bet of 1 credit):");
    printf("\nPair\t\t\t\t1 credit");
    printf("\nTwo Pairs\t\t\t2 credits");
    printf("\nThree Pairs\t\t\t3 credits");
    printf("\nStraight\t\t\t4 credits");
    printf("\nFlush\t\t\t\t5 credits");
    printf("\nFull House\t\t\t8 credits");
    printf("\nFour of a Kind\t\t\t10 credits");
    printf("\nStraight Flush\t\t\t20 credits");
    printf("\n\nHave Fun!!\n\n");
}
// Function to deal the first five cards
void getFirstHand(int cardRank[], int cardSuit[]) {
    int i, j;
    int cardDup;
    for (i=0; i < 5; i++) {
        cardDup = 0;
        do {
            cardRank[i] = (rand() %13);
            cardSuit[i] = (rand() %4);
            for (j=0; j < i; j++) {
                if ((cardRank[i] == cardRank[j]) &&
                    (cardSuit[i] == cardSuit[j])) {
                    cardDup = 1;
                }
            }
        } while (cardDup == 1);
    }
}
// Function that changes the Suit integer value to a character
// representing the suit
char getSuit(int suit) {
    switch (suit) {
    case 0:
        return('c');
    case 1:
        return('d');
    case 2:
        return('h');
    case 3:
        return('s');
    }
}
// Function that changes the rank integer value to a character
// representing the rank
char getRank(int rank) {
    switch (rank) {
    case 0:
        return('A');
    case 1:
        return('2');
    case 2:
        return('3');
    case 3:
        return('4');
    case 4:
        return('5');
    case 5:
        return('6');
    case 6:
        return('7');
    case 7:
        return('8');
    case 8:
        return('9');
    case 9:
        return('T');
    case 10:
        return('J');
    case 11:
        return('Q');
    case 12:
        return('K');
    }
}
// Function to get the user's bet, between 1 and 5
int getBet() {
    int bet;
    do {
        printf("How much do you want to bet? (Enter a number ");
        printf("1 to 5, or 0 to quit the game):");
        scanf(" %d", &bet);
        if (bet >= 1 && bet <= 5) {
            return(bet);
        } else if (bet == 0) {
            exit(1);
        } else {
            printf("\n\nPlease enter a bet from 1-5 or ");
            printf("0 to quit the game. \n");
        }
    } while ((bet < 0) || (bet > 5));
}
// Last function reviews the final hand and determines the value of
// the hand
int analyzeHand(int ranksinHand[], int suitsinHand[]) {
    int num_consec = 0;
    int i, rank, suit;
    int straight = FALSE;
    int flush = FALSE;
    int four = FALSE;
    int three = FALSE;
    int pairs = FALSE;
    for (suit = 0; suit < 4; suit ++)
        if (suitsinHand[suit] == 5)
            flush = TRUE;
    rank = 0;
    while (ranksinHand[rank] == 0)
        rank++;
    for (; rank < 13 && ranksinHand[rank]; rank++)
        num_consec++;
    if (num_consec == 5) {
        straight = TRUE;
    }
    for (rank = 0; rank < 13; rank++) {
        if (ranksinHand[rank] == 4)
            four = TRUE;
        if (ranksinHand[rank] == 3)
            three = TRUE;
        if (ranksinHand[rank] == 2)
            pairs++;
    }
    if (straight && flush) {
        printf("Straight Flush\n\n");
        return(20);
    } else if (four) {
        printf("Four of a Kind\n\n");
        return(10);
    } else if (three && pairs == 1) {
        printf("Full House\n\n");
        return(8);
    } else if (flush) {
        printf("Flush\n\n");
        return(5);
    } else if (straight) {
        printf("Straight\n\n");
        return(4);
    } else if (three) {
        printf("Three of a Kind\n\n");
        return(3);
    } else if (pairs == 2) {
        printf("Two Pairs\n\n");
        return(2);
    } else if (pairs == 1) {
        printf("Pair\n\n");
        return(1);
    } else {
        printf("High Card\n\n");
        return(0);
    }
}
void getFinalHand(int cardRank[], int cardSuit[], int finalRank[],
                  int finalSuit[], int ranksinHand[],
                  int suitsinHand[]) {
    int i, j, cardDup;
    char suit, rank, ans;
    for(i=0; i < 5; i++) {
        suit = getSuit(cardSuit[i]);
        rank = getRank(cardRank[i]);
        printf("Do you want to keep card #%d: %c%c", i+1, rank, suit);
        printf("\nPlease answer (Y/N): ");
        scanf(" %c", ans);
        if (toupper(ans) == 'Y') {
            finalRank[i] = cardRank[i];
            finalSuit[i] = cardSuit[i];
            ranksinHand[finalRank[i]]++;
            suitsinHand[finalSuit[i]]++;
            continue;
        } else if (toupper(ans) == 'N') {
            cardDup = 0;
            do {
                cardDup = 0;
                finalRank[i] = (rand() % 13);
                finalSuit[i] = (rand() % 4);
                for (j=0; j < 5; j++) {
                    if ((finalRank[i] == finalRank[j]) &&
                        (finalSuit[i] == finalSuit[j])) {
                        cardDup = 1;
                    }
                }
            } while (cardDup == 1);
            ranksinHand[finalRank[i]]++;
            suitsinHand[finalSuit[i]]++;
        }
    }
}
 
    