Hey everyone, i've got myself stuck on a problem of determining a winner.
While doing a battle if a player runs out of cards it will use the last card(card that started the battle).
I cant seem to get all the bugs out of it; and i think im overlooking something.
Any help would be greatly appreciated.

//Brandon 


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>


//card structure
struct _Card
{
    int suit;//the suit of the playing card
    int value;//the value of the playing card
    struct _Card * nextCard;
};
typedef struct _Card card;
typedef card * link;

//list structure
struct _List
{
    link front;
    link bottom;
};
typedef struct _List list;
typedef list * linklist;


//function prototypes
link initCard();
void createDeck(linklist deck);
void enqueueCard(linklist deck, int suit, int value);
void dequeueCard(linklist deck);
void printDeck(linklist deck);
void shuffleDeck(linklist deck);
void dealCards(linklist deck, linklist player1, linklist player2);
int battle(linklist player1, linklist player2, int player1Count, int player2Count, linklist player1Play, linklist player2Play);


//main
int main(void)
{
    int status = 0;
    int player1Count;
    int player2Count;
    linklist deck;
    linklist player1;
    linklist player2;
    linklist player1Play;
    linklist player2Play;

    //initialize
    player1 = malloc(sizeof(list));
    player2 = malloc(sizeof(list));
    deck = malloc(sizeof(list));
    player1Play = malloc(sizeof(list));
    player2Play = malloc(sizeof(list));

    //set to null
    player1->front = NULL;
    player1->bottom = NULL;
    player2->front = NULL;
    player2->bottom = NULL;
    deck->front = NULL;
    deck->bottom = NULL;
    player1Play->front = NULL;
    player1Play->bottom = NULL;
    player2Play->front = NULL;
    player2Play->bottom = NULL;

    createDeck(deck);
    printDeck(deck);
    printf("\n\n\n\n\n\n");
    shuffleDeck(deck);
    printDeck(deck);

    dealCards(deck, player1, player2);
    printf("\nplayer 1's deck\n");
    printDeck(player1);
    printf("player 2's deck\n");
    printDeck(player2);
    printf("\n\n\n\n");

    while (player1->front != NULL && player2->front != NULL)
    {
        //counter should be at 26
        player1Count = 26;
        player2Count = 26;

        //start playing the game
        if (player1->front->value > player2->front->value)
        {
            printf("Player One: %d player 2: %d\n", player1->front->value, player2->front->value);
            link temp = player1->front;
            link temp2 = player2->front;

            //player one wins
            printf("Player one wins this round!\n");

            //remove cards from the decks
            dequeueCard(player1);
            dequeueCard(player2);

            //put the cards on the bottom of the winners deck
            enqueueCard(player1, temp->suit, temp->value);
            enqueueCard(player1, temp2->suit, temp2->value);

            //decrement player two counter
            player2Count--;

            //increment counter
            player1Count++;
        }
        else if (player2->front->value > player1->front->value)
        {
            printf("Player One: %d player 2: %d\n", player1->front->value, player2->front->value);
            link temp = player1->front;
            link temp2 = player2->front;

            //player one wins
            printf("Player two wins this round!\n");

            //remove cards from the decks
            dequeueCard(player1);
            dequeueCard(player2);

            //put the cards on the bottom of the winners deck
            enqueueCard(player2, temp->suit, temp->value);
            enqueueCard(player2, temp2->suit, temp2->value);

            //decrement player one
            player1Count--;

            //increment counter
            player2Count++;
        }
        else if (player1->front->value == player2->front->value)
        {
            //war
            printf("Player One: %d player 2: %d\n", player1->front->value, player2->front->value);
            printf("War!!\n");
            status = battle(player1, player2, player1Count, player2Count, player1Play, player2Play);
            if (status == 2)
            {
                continue;
            }
            else
            {
                break;
            }
        }

    }//end of while

    if (player1->front == NULL && player2->front != NULL)
    {
        //player two wins
        printf("Player two is the winner!!!\n");
    }
    else if (player2->front == NULL && player1->front != NULL)
    {
        printf("Player one is the winner!!!\n");
    }
    else
    {
        //error here
        //cleanup
    }

    //free
    free(player1);
    free(player2);
    free(deck);
    free(player1Play);
    free(player2Play);

    //getch();
    return 0;
}


link initCard()
{
    link iCard;
    iCard = malloc(sizeof(card));
    if (iCard == NULL)
    {
        printf("Malloc failed. Exiting...\n");
        exit(1);
    }
    iCard->nextCard = NULL;
    return iCard;
}

void createDeck(linklist deck)
{

    int suit = 0;
    int value = 0;


    for (suit = 1; suit <= 4; suit++)//four different suits in a deck of cards
    {
        for (value = 1; value <= 13; value++)//13 different values for each suit in a deck of cards
        {
            enqueueCard(deck, suit, value);
        }
    }
}

void enqueueCard(linklist deck, int suit, int value)
{
    link card;
    link tmp;
    card = initCard();
    card->suit = suit;
    card->value = value;

    if (deck->front == NULL && deck->bottom == NULL)
    {
        deck->front = card;
        deck->bottom = card;
    }
    else
    {
        tmp = deck->bottom;
        deck->bottom->nextCard = card;
        tmp->nextCard = card;
        deck->bottom = card;
    }
}
void dequeueCard(linklist deck)
{
    link tmp;
    int suit = 0;
    int value = 0;

    if (deck->front == NULL)
    {
        printf("Trying to dequeue from an empty list. Exiting.\n");
        exit(1);
    }
    else if (deck->front == deck->bottom)
    {
        tmp = deck->front;
        suit = tmp->suit;
        value = tmp->value;

        free(tmp);

        deck->front = NULL;
        deck->bottom = NULL;
    }
    else
    {

        tmp = deck->front;
        suit = tmp->suit;
        value = tmp->value;
        deck->front = deck->front->nextCard;
        free(tmp);
    }
}

void printDeck(linklist deck)
{
    link tmp = deck->front;

    if (tmp == NULL)
    {
        printf("Print error. Exiting.");
        exit(1);
    }
    else
    {
        while (tmp != NULL)
        {

            switch (tmp->value) {
            case(1) :
                printf("Ace");
                break;
            case(13) :
                printf("King");
                break;
            case(12) :
                printf("Queen");
                break;
            case(11) :
                printf("Jack");
                break;
            default:
                printf("%d", tmp->value);
            }
            printf(" of ");
            switch (tmp->suit) {
            case(1) :
                printf("Clubs\n");
                break;
            case(2) :
                printf("Diamonds\n");
                break;
            case(3) :
                printf("Hearts\n");
                break;
            case(4) :
                printf("Spades\n");
                break;
            default:
                printf("No such suit %d\n", tmp->suit);
                exit(1);
            }
            tmp = tmp->nextCard;
        }
    }
}
//Shuffle deck function swaps the values in the nodes
void shuffleDeck(linklist deck)
{
    link tmp;
    int suit;
    int value;
    int i;
    int random;

    srand(time(NULL));//seed time

    for (i = 0; i < 1000; i++)//1000 shuffles
    {
        tmp = deck->front;
        random = rand() % (52 + 1);
        if (random == 0)
        {
            tmp = deck->front;
        }
        else
        {
            while (random > 0)
            {
                if (tmp->nextCard)
                    tmp = tmp->nextCard;
                random--;
            }
        }
        suit = deck->front->suit;
        value = deck->front->value;
        deck->front->suit = tmp->suit;
        deck->front->value = tmp->value;
        tmp->suit = suit;
        tmp->value = value;
    }
}

void dealCards(linklist deck, linklist player1, linklist player2)
{
    link tmp;
    int i;

    tmp = deck->front;

    for (i = 0; i < 26; i++)
    {
        if (tmp != NULL)
        {
            enqueueCard(player1, tmp->suit, tmp->value);
            tmp = tmp->nextCard;
            enqueueCard(player2, tmp->suit, tmp->value);
            tmp = tmp->nextCard;
        }
        else
        {
            printf("Dealing error\n");
            exit(1);
        }
    }
}

int battle(linklist player1, linklist player2, int player1Count, int player2Count, linklist player1Play, linklist player2Play)
{
    if (player1->front != NULL && player2->front != NULL)
    {
        if (player1->front->value == player2->front->value)
        {

            //PLAYER ONE
            if (player1Count - 4 != 0 && player1Count - 4 >= 4)
            {
                enqueueCard(player1Play, player1->front->nextCard->suit, player1->front->nextCard->value);
                enqueueCard(player1Play, player1->front->nextCard->nextCard->suit, player1->front->nextCard->nextCard->value);
                enqueueCard(player1Play, player1->front->nextCard->nextCard->nextCard->suit, player1->front->nextCard->nextCard->nextCard->value);
                enqueueCard(player1Play, player1->front->nextCard->nextCard->nextCard->nextCard->suit, player1->front->nextCard->nextCard->nextCard->nextCard->value);
                //tempCard1 = player1->front->nextCard;//face down
                //tempCard2 = player1->front->nextCard->nextCard;//face down
                //tempCard3 = player1->front->nextCard->nextCard->nextCard;//face down
                //tempCard4 = player1->front->nextCard->nextCard->nextCard->nextCard;//face up
                //deq
                dequeueCard(player1);
                dequeueCard(player1);
                dequeueCard(player1);
                dequeueCard(player1);
                player1Count = player1Count - 4;

            }
            else if (player1Count == 1)
            {
                enqueueCard(player1Play, player1->front->suit, player1->front->value);
                dequeueCard(player1);
                player1Count--;
            }
            else if (player1Count == 2)
            {

                enqueueCard(player1Play, player1->front->nextCard->suit, player1->front->nextCard->value);
                enqueueCard(player1Play, player1->front->suit, player1->front->value);
                dequeueCard(player1);
                dequeueCard(player1);
                player1Count = player1Count - 2;
            }
            else if (player1Count == 3)
            {

                enqueueCard(player1Play, player1->front->nextCard->suit, player1->front->nextCard->value);
                enqueueCard(player1Play, player1->front->nextCard->nextCard->suit, player1->front->nextCard->nextCard->value);
                enqueueCard(player1Play, player1->front->suit, player1->front->value);
                dequeueCard(player1);
                dequeueCard(player1);
                dequeueCard(player1);
                player1Count = player1Count - 3;
            }

            //PLAYER TWO
            if (player2Count - 4 != 0 && player2Count - 4 >= 4)
            {
                enqueueCard(player2Play, player2->front->nextCard->suit, player2->front->nextCard->value);
                enqueueCard(player2Play, player2->front->nextCard->nextCard->suit, player2->front->nextCard->nextCard->value);
                enqueueCard(player2Play, player2->front->nextCard->nextCard->nextCard->suit, player2->front->nextCard->nextCard->nextCard->value);
                enqueueCard(player2Play, player2->front->nextCard->nextCard->nextCard->nextCard->suit, player2->front->nextCard->nextCard->nextCard->nextCard->value);
                //tempCard1 = player2->front->nextCard;//face down
                //tempCard2 = player2->front->nextCard->nextCard;//face down
                //tempCard3 = player2->front->nextCard->nextCard->nextCard;//face down
                //tempCard4 = player2->front->nextCard->nextCard->nextCard->nextCard;//face up
                dequeueCard(player2);
                dequeueCard(player2);
                dequeueCard(player2);
                dequeueCard(player2);
                player2Count = player2Count - 4;
            }
            else if (player2Count == 1)
            {
                enqueueCard(player2Play, player2->front->suit, player2->front->value);
                dequeueCard(player2);
                player2Count--;
            }
            else if (player2Count == 2)
            {

                enqueueCard(player2Play, player2->front->nextCard->suit, player2->front->nextCard->value);
                enqueueCard(player2Play, player2->front->suit, player2->front->value);
                dequeueCard(player2);
                dequeueCard(player2);
                player2Count = player2Count - 2;
            }
            else if (player2Count == 3)
            {

                enqueueCard(player2Play, player2->front->nextCard->suit, player2->front->nextCard->value);
                enqueueCard(player2Play, player2->front->nextCard->nextCard->suit, player2->front->nextCard->nextCard->value);
                enqueueCard(player2Play, player2->front->suit, player2->front->value);
                dequeueCard(player2);
                dequeueCard(player2);
                dequeueCard(player2);
                player2Count = player2Count - 3;
            }

            //check for win
            if (player1Play->front->value > player2Play->front->value)
            {
                printf("Player One: %d player 2: %d\n", player1Play->front->value, player2Play->front->value);
                printf("win one\n");
                //player one wins the round
                while (player1Play->front != NULL)
                {
                    enqueueCard(player1, player1Play->front->suit, player1Play->front->value);
                    enqueueCard(player1, player2Play->front->suit, player2Play->front->value);
                    dequeueCard(player1Play);
                    dequeueCard(player2Play);
                    player1Count++;
                    return 1;
                }

            }
            else if (player2Play->front->value > player1Play->front->value)
            {
                printf("Player One: %d player 2: %d\n", player1Play->front->value, player2Play->front->value);
                printf("win two\n");
                //player two wins the round
                while (player2Play->front != NULL)
                {
                    enqueueCard(player2, player1Play->front->suit, player1Play->front->value);
                    enqueueCard(player2, player2Play->front->suit, player2Play->front->value);
                    dequeueCard(player1Play);
                    dequeueCard(player2Play);
                    player2Count++;
                    return 1;
                }
            }
            else if (player1Play->front->value == player2Play->front->value)
            {
                printf("Player One: %d player 2: %d\n", player1Play->front->value, player2Play->front->value);
                printf("War again!!\n");
                //war again
                return 2;
                //battle(player1, player2, player1Count, player2Count,player1Play,player2Play);
            }


        }//end if
    }
    return 1;
}

Posting 500+ lines of code with no indication or description of the errors or problems you are getting just doesn't work.

Sorry about that i thought i posted my problem.

The battle function seems to crash when I try to enq the cards to the player1Play and player2Play linked lists.

It also skips over the last if statements in main when checking for a winner and it seems that "garbage is contained in player1->front and player2-front when debugging with visual studio.

Im pointing towards the battle function; for some reason i cannot get the function right since i added the check "if a player runs out of cards during a battle use the last card that started the battle"

Here is an update: this is what is contained in player1->front and player2->front when the program is ran (this is before freeing the memory)

player1->front = 0x0147b6b0 {suit=-17891602 value=-17891602 
nextCard=0x0147b6f8 {suit=-17891602 value=-17891602 nextCard=...} }

Seems to be just garbage, and its skipping over the if/else statment at the end of main.(line 156)

After the values are equal and it goes into the battle function it seems to break out of the while loop and not put all the cards from player1Play or player2Play into the player1 or player2 linked list. (line 498, 492)

Edited 1 Year Ago by brandon66: updated

Here is a screenshot of it running.

I figured out it does not break out of the while loop one line 498,492 and it completes like it should.

Maybe it is dequeing the last card in the players deck and whats left in the linked list is garbage memory? If so how would i fix this?

Not sure how to narrow it down now.
error.PNG

Edited 1 Year Ago by brandon66

Another thing i forgot to mention is i turned int battle to void battle and removed the return statements and

I changed line 144-151 to just
battle(player1, player2, player1Count, player2Count, player1Play, player2Play);

Attachments
//Brandon McBride
//queue
//3-25-2015


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>


//card structure
struct _Card
{
	int suit;//the suit of the playing card
	int value;//the value of the playing card
	struct _Card * nextCard;
};
typedef struct _Card card;
typedef card * link;

//list structure
struct _List
{
	link front;
	link bottom;
};
typedef struct _List list;
typedef list * linklist;


//function prototypes
link initCard();
void createDeck(linklist deck);
void enqueueCard(linklist deck, int suit, int value);
void dequeueCard(linklist deck);
void printDeck(linklist deck);
void shuffleDeck(linklist deck);
void dealCards(linklist deck, linklist player1, linklist player2);
void battle(linklist player1, linklist player2, int player1Count, int player2Count, linklist player1Play, linklist player2Play);


//main
int main(void)
{
	int status = 0;
	int player1Count;
	int player2Count;
	//counter should be at 26
	player1Count = 26;
	player2Count = 26;
	linklist deck;
	linklist player1;
	linklist player2;
	linklist player1Play;
	linklist player2Play;
	
	//initialize
	player1 = malloc(sizeof(list));
	player2 = malloc(sizeof(list));
	deck = malloc(sizeof(list));
	player1Play = malloc(sizeof(list));
	player2Play = malloc(sizeof(list));

	//set to null
	player1->front = NULL;
	player1->bottom = NULL;
	player2->front = NULL;
	player2->bottom = NULL;
	deck->front = NULL;
	deck->bottom = NULL;
	player1Play->front = NULL;
	player1Play->bottom = NULL;
	player2Play->front = NULL;
	player2Play->bottom = NULL;

	createDeck(deck);
	printDeck(deck);
	printf("\n\n\n\n\n\n");
	shuffleDeck(deck);
	printDeck(deck);

	dealCards(deck, player1, player2);
	printf("\nplayer 1's deck\n");
	printDeck(player1);
	printf("player 2's deck\n");
	printDeck(player2);
	printf("\n\n\n\n");

	while (player1->front != NULL && player2->front != NULL)
	{

		//start playing the game
		if (player1->front->value > player2->front->value)
		{
			printf("Player One: %d player 2: %d\n", player1->front->value, player2->front->value);
			link temp = player1->front;
			link temp2 = player2->front;

			//player one wins
			printf("Player one wins this round!\n");

			//remove cards from the decks
			dequeueCard(player1);
			dequeueCard(player2);

			//put the cards on the bottom of the winners deck
			enqueueCard(player1, temp->suit, temp->value);
			enqueueCard(player1, temp2->suit, temp2->value);

			//decrement player two counter
			player2Count--;

			//increment counter
			player1Count++;
		}
		else if (player2->front->value > player1->front->value)
		{
			printf("Player One: %d player 2: %d\n", player1->front->value, player2->front->value);
			link temp = player1->front;
			link temp2 = player2->front;

			//player one wins
			printf("Player two wins this round!\n");

			//remove cards from the decks
			dequeueCard(player1);
			dequeueCard(player2);

			//put the cards on the bottom of the winners deck
			enqueueCard(player2, temp->suit, temp->value);
			enqueueCard(player2, temp2->suit, temp2->value);

			//decrement player one
			player1Count--;

			//increment counter
			player2Count++;
		}
		else if (player1->front->value == player2->front->value)
		{
			//war
			printf("Player One: %d player 2: %d\n", player1->front->value, player2->front->value);
			printf("War!!\n");
			battle(player1, player2, player1Count, player2Count, player1Play, player2Play);
		}

	}//end of while

	if (player1->front == NULL && player2->front != NULL)
	{
		//player two wins
		printf("Player two is the winner!!!\n");
	}
	else if (player2->front == NULL && player1->front != NULL)
	{
		printf("Player one is the winner!!!\n");
	}
	else
	{
		//error here
		//cleanup
	}

	//free
	free(player1);
	free(player2);
	free(deck);
	free(player1Play);
	free(player2Play);

	//getch();
	return 0;
}


link initCard()
{
	link iCard;
	iCard = malloc(sizeof(card));
	if (iCard == NULL)
	{
		printf("Malloc failed. Exiting...\n");
		exit(1);
	}
	iCard->nextCard = NULL;
	return iCard;
}

void createDeck(linklist deck)
{

	int suit = 0;
	int value = 0;


	for (suit = 1; suit <= 4; suit++)//four different suits in a deck of cards
	{
		for (value = 1; value <= 13; value++)//13 different values for each suit in a deck of cards
		{
			enqueueCard(deck, suit, value);
		}
	}
}

void enqueueCard(linklist deck, int suit, int value)
{
	link card;
	link tmp;
	card = initCard();
	card->suit = suit;
	card->value = value;

	if (deck->front == NULL && deck->bottom == NULL)
	{
		deck->front = card;
		deck->bottom = card;
	}
	else
	{
		tmp = deck->bottom;
		deck->bottom->nextCard = card;
		tmp->nextCard = card;
		deck->bottom = card;
	}
}
void dequeueCard(linklist deck)
{
	link tmp;
	int suit = 0;
	int value = 0;

	if (deck->front == NULL)
	{
		printf("Trying to dequeue from an empty list. Exiting.\n");
		exit(1);
	}
	else if (deck->front == deck->bottom)
	{
		tmp = deck->front;
		suit = tmp->suit;
		value = tmp->value;

		free(tmp);

		deck->front = NULL;
		deck->bottom = NULL;
	}
	else
	{

		tmp = deck->front;
		suit = tmp->suit;
		value = tmp->value;
		deck->front = deck->front->nextCard;
		free(tmp);
	}
}

void printDeck(linklist deck)
{
	link tmp = deck->front;

	if (tmp == NULL)
	{
		printf("Print error. Exiting.");
		exit(1);
	}
	else
	{
		while (tmp != NULL)
		{

			switch (tmp->value) {
			case(1) :
				printf("Ace");
				break;
			case(13) :
				printf("King");
				break;
			case(12) :
				printf("Queen");
				break;
			case(11) :
				printf("Jack");
				break;
			default:
				printf("%d", tmp->value);
			}
			printf(" of ");
			switch (tmp->suit) {
			case(1) :
				printf("Clubs\n");
				break;
			case(2) :
				printf("Diamonds\n");
				break;
			case(3) :
				printf("Hearts\n");
				break;
			case(4) :
				printf("Spades\n");
				break;
			default:
				printf("No such suit %d\n", tmp->suit);
				exit(1);
			}
			tmp = tmp->nextCard;
		}
	}
}
//Shuffle deck function swaps the values in the nodes
void shuffleDeck(linklist deck)
{
	link tmp;
	int suit;
	int value;
	int i;
	int random;

	srand(time(NULL));//seed time

	for (i = 0; i < 1000; i++)//1000 shuffles
	{
		tmp = deck->front;
		random = rand() % (52 + 1);
		if (random == 0)
		{
			tmp = deck->front;
		}
		else
		{
			while (random > 0)
			{
				if (tmp->nextCard)
					tmp = tmp->nextCard;
				random--;
			}
		}
		suit = deck->front->suit;
		value = deck->front->value;
		deck->front->suit = tmp->suit;
		deck->front->value = tmp->value;
		tmp->suit = suit;
		tmp->value = value;
	}
}

void dealCards(linklist deck, linklist player1, linklist player2)
{
	link tmp;
	int i;

	tmp = deck->front;

	for (i = 0; i < 26; i++)
	{
		if (tmp != NULL)
		{
			enqueueCard(player1, tmp->suit, tmp->value);
			tmp = tmp->nextCard;
			enqueueCard(player2, tmp->suit, tmp->value);
			tmp = tmp->nextCard;
		}
		else
		{
			printf("Dealing error\n");
			exit(1);
		}
	}
}

void battle(linklist player1, linklist player2, int player1Count, int player2Count, linklist player1Play, linklist player2Play)
{
	if (player1->front != NULL && player2->front != NULL)
	{
		if (player1->front->value == player2->front->value)
		{

			//PLAYER ONE
			if (player1Count - 4 != 0 && player1Count - 4 >= 4)
			{
				enqueueCard(player1Play, player1->front->nextCard->suit, player1->front->nextCard->value);
				enqueueCard(player1Play, player1->front->nextCard->nextCard->suit, player1->front->nextCard->nextCard->value);
				enqueueCard(player1Play, player1->front->nextCard->nextCard->nextCard->suit, player1->front->nextCard->nextCard->nextCard->value);
				enqueueCard(player1Play, player1->front->nextCard->nextCard->nextCard->nextCard->suit, player1->front->nextCard->nextCard->nextCard->nextCard->value);
				//tempCard1 = player1->front->nextCard;//face down
				//tempCard2 = player1->front->nextCard->nextCard;//face down
				//tempCard3 = player1->front->nextCard->nextCard->nextCard;//face down
				//tempCard4 = player1->front->nextCard->nextCard->nextCard->nextCard;//face up
				//deq
				dequeueCard(player1);
				dequeueCard(player1);
				dequeueCard(player1);
				dequeueCard(player1);
				player1Count = player1Count - 4;

			}
			else if (player1Count == 1)
			{
				enqueueCard(player1Play, player1->front->suit, player1->front->value);
				dequeueCard(player1);
				player1Count--;
			}
			else if (player1Count == 2)
			{

				enqueueCard(player1Play, player1->front->nextCard->suit, player1->front->nextCard->value);
				enqueueCard(player1Play, player1->front->suit, player1->front->value);
				dequeueCard(player1);
				dequeueCard(player1);
				player1Count = player1Count - 2;
			}
			else if (player1Count == 3)
			{

				enqueueCard(player1Play, player1->front->nextCard->suit, player1->front->nextCard->value);
				enqueueCard(player1Play, player1->front->nextCard->nextCard->suit, player1->front->nextCard->nextCard->value);
				enqueueCard(player1Play, player1->front->suit, player1->front->value);
				dequeueCard(player1);
				dequeueCard(player1);
				dequeueCard(player1);
				player1Count = player1Count - 3;
			}

			//PLAYER TWO
			if (player2Count - 4 != 0 && player2Count - 4 >= 4)
			{
				enqueueCard(player2Play, player2->front->nextCard->suit, player2->front->nextCard->value);
				enqueueCard(player2Play, player2->front->nextCard->nextCard->suit, player2->front->nextCard->nextCard->value);
				enqueueCard(player2Play, player2->front->nextCard->nextCard->nextCard->suit, player2->front->nextCard->nextCard->nextCard->value);
				enqueueCard(player2Play, player2->front->nextCard->nextCard->nextCard->nextCard->suit, player2->front->nextCard->nextCard->nextCard->nextCard->value);
				//tempCard1 = player2->front->nextCard;//face down
				//tempCard2 = player2->front->nextCard->nextCard;//face down
				//tempCard3 = player2->front->nextCard->nextCard->nextCard;//face down

I have updated my code a bit, it seems that i have a problem with my counter and determining what happens if a player runs out of cards.
(if a player runs out of cards during a war it should use the last card that started the war)
If anyone could it help it would be greatly appreciated.

Attachments
//Brandon McBride
//queue
//3-25-2015


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>


//card structure
struct _Card
{
	int suit;//the suit of the playing card
	int value;//the value of the playing card
	struct _Card * nextCard;
};
typedef struct _Card card;
typedef card * link;

//list structure
struct _List
{
	link front;
	link bottom;
};
typedef struct _List list;
typedef list * linklist;


//function prototypes
link initCard();
void createDeck(linklist deck);
void enqueueCard(linklist deck, int suit, int value);
void dequeueCard(linklist deck);
void printDeck(linklist deck);
void shuffleDeck(linklist deck);
void dealCards(linklist deck, linklist player1, linklist player2);
int battle(linklist player1, linklist player2, int player1Count, int player2Count, linklist player1Play, linklist player2Play);


//main
int main(void)
{
	int status = 0;
	int player1Count;
	int player2Count;
	//counter should be at 26
	player1Count = 26;
	player2Count = 26;
	linklist deck;
	linklist player1;
	linklist player2;
	linklist player1Play;
	linklist player2Play;
	
	//initialize
	player1 = malloc(sizeof(list));
	player2 = malloc(sizeof(list));
	deck = malloc(sizeof(list));
	player1Play = malloc(sizeof(list));
	player2Play = malloc(sizeof(list));

	//set to null
	player1->front = NULL;
	player1->bottom = NULL;
	player2->front = NULL;
	player2->bottom = NULL;
	deck->front = NULL;
	deck->bottom = NULL;
	player1Play->front = NULL;
	player1Play->bottom = NULL;
	player2Play->front = NULL;
	player2Play->bottom = NULL;

	createDeck(deck);
	printDeck(deck);
	printf("\n\n\n\n\n\n");
	shuffleDeck(deck);
	printDeck(deck);

	dealCards(deck, player1, player2);
	shuffleDeck(player1);
	shuffleDeck(player2);
	printf("\nplayer 1's deck\n");
	printDeck(player1);
	printf("player 2's deck\n");
	printDeck(player2);
	printf("\n\n\n\n");

	while (player1->front != NULL && player2->front != NULL)
	{
		//start playing the game
		if (player1->front->value > player2->front->value)
		{
			printf("Player One: %d player 2: %d\n", player1->front->value, player2->front->value);

			//player one wins
			printf("Player one wins this round!\n\n");

			//put the cards on the bottom of the winners deck
			enqueueCard(player1, player1->front->suit, player1->front->value);
			enqueueCard(player1, player2->front->suit, player2->front->value);
			
			//remove cards from the decks
			dequeueCard(player1);
			dequeueCard(player2);

			//decrement player two counter
			player2Count--;
			//increment counter
			player1Count++;
		}
		else if (player2->front->value > player1->front->value)
		{
			printf("Player One: %d player 2: %d\n", player1->front->value, player2->front->value);

			//player one wins
			printf("Player two wins this round!\n\n");


			//put the cards on the bottom of the winners deck
			enqueueCard(player2, player1->front->suit, player1->front->value);
			enqueueCard(player2, player2->front->suit, player2->front->value);

			//remove cards from the decks
			dequeueCard(player1);
			dequeueCard(player2);

			//decrement player one
			player1Count--;
			//increment counter
			player2Count++;
		}
		else if (player1->front->value == player2->front->value)
		{
			int status = 0;
			//war
			printf("Player One: %d player 2: %d\n", player1->front->value, player2->front->value);
			printf("War!!\n");
			status = battle(player1, player2, player1Count, player2Count, player1Play, player2Play);
			while (status == 2)
			{
				status = battle(player1, player2, player1Count, player2Count, player1Play, player2Play);
			}
		}
	}//end of while

	if (player1->front == NULL && player2->front != NULL)
	{
		//player two wins
		printf("Player two is the winner!!!\n");
	}
	else if (player2->front == NULL && player1->front != NULL)
	{
		printf("Player one is the winner!!!\n");
	}
	else
	{
		//error here
		//cleanup
	}

	//free
	free(player1);
	free(player2);
	free(deck);
	free(player1Play);
	free(player2Play);

	//getch();
	return 0;
}


link initCard()
{
	link iCard;
	iCard = malloc(sizeof(card));
	if (iCard == NULL)
	{
		printf("Malloc failed. Exiting...\n");
		exit(1);
	}
	iCard->nextCard = NULL;
	return iCard;
}

void createDeck(linklist deck)
{
	//vairables
	int suit = 0;
	int value = 0;

	//loop to store cards in the deck
	for (suit = 1; suit <= 4; suit++)//four different suits in a deck of cards
	{
		for (value = 1; value <= 13; value++)//13 different values for each suit in a deck of cards
		{
			enqueueCard(deck, suit, value);
		}
	}
}

void enqueueCard(linklist deck, int suit, int value)
{
	//variables
	link card;
	link tmp;
	card = initCard();
	card->suit = suit;
	card->value = value;

	if (deck->front == NULL && deck->bottom == NULL)
	{
		//set the front and bottom to  card
		deck->front = card;
		deck->bottom = card;
	}
	else
	{
		//set to to the bottom card
		tmp = deck->bottom;

		//set the bottom card equal to  card
		deck->bottom->nextCard = card;

		tmp->nextCard = card;
		deck->bottom = card;
	}
}
void dequeueCard(linklist deck)
{
	//variables
	link tmp;
	int suit = 0;
	int value = 0;

	if (deck->front == NULL)
	{
		//print error and exit
		printf("Trying to dequeue from an empty list. Exiting.\n");
		exit(1);
	}
	else if (deck->front == deck->bottom)
	{
		//set temp equal to the front card in the deck
		tmp = deck->front;

		//set the suit and value variables equal to tmp->suit tmp->value
		suit = tmp->suit;
		value = tmp->value;

		//free tmp
		free(tmp);

		//set to NULL
		deck->front = NULL;
		deck->bottom = NULL;
	}
	else
	{
		//set temp equal to the front card in the deck
		tmp = deck->front;

		//set the suit and value variables equal to tmp->suit tmp->value
		suit = tmp->suit;
		value = tmp->value;

		//set deck->front to the nextCard
		deck->front = deck->front->nextCard;

		//free temp
		free(tmp);
	}
}

void printDeck(linklist deck)
{
	link tmp = deck->front;

	if (tmp == NULL)
	{
		printf("Print error. Exiting.");
		exit(1);
	}
	else
	{
		while (tmp != NULL)
		{

			switch (tmp->value) {
			case(1) :
				printf("Ace");
				break;
			case(13) :
				printf("King");
				break;
			case(12) :
				printf("Queen");
				break;
			case(11) :
				printf("Jack");
				break;
			default:
				printf("%d", tmp->value);
			}
			printf(" of ");
			switch (tmp->suit) {
			case(1) :
				printf("Clubs\n");
				break;
			case(2) :
				printf("Diamonds\n");
				break;
			case(3) :
				printf("Hearts\n");
				break;
			case(4) :
				printf("Spades\n");
				break;
			default:
				printf("No such suit %d\n", tmp->suit);
				exit(1);
			}
			tmp = tmp->nextCard;
		}
	}
}
//Shuffle deck function swaps the values in the nodes
void shuffleDeck(linklist deck)
{
	link tmp;
	int suit;
	int value;
	int i;
	int random;

	srand(time(NULL));//seed time

	for (i = 0; i < 1000; i++)//1000 shuffles
	{
		tmp = deck->front;
		random = rand() % (52 + 1);
		if (random == 0)
		{
			tmp = deck->front;
		}
		else
		{
			while (random > 0)
			{
				if (tmp->nextCard)
					tmp = tmp->nextCard;
				random--;
			}
		}
		suit = deck->front->suit;
		value = deck->front->value;
		deck->front->suit = tmp->suit;
		deck->front->value = tmp->value;
		tmp->suit = suit;
		tmp->value = value;
	}
}

void dealCards(linklist deck, linklist player1, linklist player2)
{
	link tmp;
	int i;

	tmp = deck->front;

	for (i = 0; i < 26; i++)
	{
		if (tmp != NULL)
		{
			enqueueCard(player1, tmp->suit, tmp->value);
			tmp = tmp->nextCard;
			enqueueCard(player2, tmp->suit, tmp->value);
			tmp = tmp->nextCard;
		}
		else
		{
			printf("Dealing error\n");
			exit(1);
		}
	}
}

int battle(linklist player1, linklist player2, int player1Count, int player2Count, linklist player1Play, linklist player2Play)
{
	if (player1->front != NULL && player2->front != NULL)
	{
			printf("player1count %d\n", player1Count);
			printf("player2count %d\n", player2Count);
			//PLAYER ONE
			if (player1Count - 4 != 0 && player1Count - 4 >= 4)
			{
				enqueueCard(player1Play, player1->front->nextCard->suit, player1->front->nextCard->value);
				enqueueCard(player1Play, player1->front->nextCard->nextCard->suit, player1->front->nextCard->nextCard->value);
				enqueueCard(player1Play, player1->front->nextCard->nextCard->nextCard->suit, player1->front->nextCard->nextCard->nextCard->value);
				enqueueCard(player1Play, player1->front->nextCard->nextCard->nextCard->nextCard->suit, player1->front->nextCard->nextCard->nextCard->nextCard->value);
				
				//deq cards
				dequeueCard(player1);
				dequeueCard(player1);
				dequeueCard(player1);
				dequeueCard(player1);
				//dequeueCard(player1);//5 for player1-front
				player1Count = player1Count - 4;

			}
			else if (player1Count == 1)
			{
				enqueueCard(player1Play, player1->front->suit, player1->front->value);
				dequeueCard(player1);
				player1Count--;
			}
			else if (player1Count == 2)
			{
				enqueueCard(player1Play, player1->front->nextCard->suit, player1->front->nextCard->value);
				enqueueCard(player1Play, player1->front->suit, player1->front->value);
				dequeueCard(player1);
				dequeueCard(player1);
				player1Count = player1Count - 2;
			}
			else if (player1Count == 3)
			{
				enqueueCard(player1Play, player1->front->nextCard->suit, player1->front->nextCard->value);
				enqueueCard(player1Play, player1->front->nextCard->nextCard->suit, player1->front->nextCard->nextCard->value);
				enqueueCard(player1Play, player1->front->suit, player1->front->value);
				dequeueCard(player1);
				dequeueCard(player1);
				dequeueCard(player1);
				player1Count = player1Count - 3;
			}

			//PLAYER TWO
			if (player2Count - 4 != 0 && player2Count - 4 >= 4)
			{
				enqueueCard(player2Play, player2->front->nextCard->suit, player2->front->nextCard->value);
				enqueueCard(player2Play, player2->front->nextCard->nextCard->suit, player2->front->nextCard->nextCard->val

I finally solved this on my own after doing some major debugging and correcting logic errors.

This question has already been answered. Start a new discussion instead.