Can someone check to see why my true and false is not workin
Can someone check to see why my true and false is not working?
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#define NUM_RANKS 13
#define NUM_SUITS 4
#define NUM_CARDS 5
int num_in_rank[NUM_RANKS];
int num_in_suit[NUM_SUITS];
bool card_exists[NUM_RANKS][NUM_SUITS];
bool royal, flush, littedog, bigdog, littlecat, bigcat, straight, straight_flush, four, three, full_house;
int pairs, stud;
void read_cards(void);
void analyze_hand(void);
void print_result(void);
int main(void)
{
while(1)
{
read_cards();
analyze_hand();
print_result();
}
}
void read_cards(void)
{
char ch, rank_ch, suit_ch;
int rank, suit;
bool bad_card;
int cards_read = 0;
for (rank=0; rank<NUM_RANKS; rank++)
{
num_in_rank[rank] = 0;
for (suit=0; suit<NUM_SUITS; suit++)
card_exists[rank][suit] = false;
}
for (suit=0; suit<NUM_SUITS; suit++)
num_in_suit[suit] = 0;
printf(\"5 Card or 7 Card Stud? (Type 5 or 7): \");
scanf( \"%d\", &stud);
if(stud == 5)
{printf(\"5 Card Stud will be played.\ \");}
else if (stud == 7)
{printf(\"7 Card Stud will be played.\ \");}
else if (stud == 0)
{exit(EXIT_SUCCESS);}
while (getchar() != \'\ \');
while (cards_read<stud)
{
bad_card = false;
printf(\"Enter a card: \");
rank_ch = getchar();
switch (rank_ch)
{
case \'0\':exit(EXIT_SUCCESS);
case \'2\':rank = 0; break;
case \'3\':rank = 1; break;
case \'4\':rank = 2; break;
case \'5\':rank = 3; break;
case \'6\':rank = 4; break;
case \'7\':rank = 5; break;
case \'8\':rank = 6; break;
case \'9\':rank = 7; break;
case \'t\':rank = 8; break;
case \'j\':rank = 9; break;
case \'q\':rank = 10; break;
case \'k\':rank = 11; break;
case \'a\':rank = 12; break;
case \'T\':rank = 8; break;
case \'J\':rank = 9; break;
case \'Q\':rank = 10; break;
case \'K\':rank = 11; break;
case \'A\':rank = 12; break;
default:bad_card = true;
}
suit_ch = getchar();
switch (suit_ch)
{
case \'c\':suit = 0; break;
case \'d\':suit = 1; break;
case \'h\':suit = 2; break;
case \'s\':suit = 3; break;
case \'C\':suit = 0; break;
case \'D\':suit = 1; break;
case \'H\':suit = 2; break;
case \'S\':suit = 3; break;
default:bad_card = true;
}
while ( (ch=getchar()) != \'\ \' )
if (ch != \' \')
bad_card = true;
if (bad_card)
printf(\"Bad card; ignored.\ \");
else if (card_exists[rank][suit])
printf(\"Duplicate card; ignored.\ \");
else
{
num_in_rank[rank]++;
num_in_suit[suit]++;
card_exists[rank][suit] = true;
cards_read++;
}
}
}
void analyze_hand(void)
{
int num_consec = 0, royal_consec = 0, total = 0, sf_consec = 0;
int rank, suit;
straight_flush = false;
straight = false;
flush = false;
four = false;
three = false;
littledog = false;
bigdog = false;
littlecat = false;
bigcat = false;
royal = false;
pairs = 0;
for (rank=0; rank<NUM_RANKS; rank++)
{
if (num_in_rank[rank] == 4)
four = true;
if (num_in_rank[rank] == 3)
three = true;
if (num_in_rank[rank] == 2)
pairs++;
}
rank = 0;
while (num_in_rank[rank] == 0)
rank++;
for (rank; rank<NUM_RANKS; rank++)
{
total = total + num_in_rank[rank];
if(num_in_rank[rank] == 0 && total < 7 && stud == 7)
{num_consec = 0;}
else
{num_consec++;}
}
if (num_consec >= NUM_CARDS)
{
straight = true;
return;
}
for (suit=0; suit<stud; suit++)
if (num_in_suit[suit] == NUM_CARDS)
flush = true;
if (straight && flush)
{
suit =0;
while (suit<NUM_SUITS)
{
for(rank==NUM_RANKS; rank >=0; rank-- )
{
if (card_exists[rank][suit])
{sf_consec++;}
else if (!card_exists[rank][suit])
{sf_consec = 0;}
}
}
if (sf_consec >= NUM_CARDS)
straight_flush= true;
}
suit=0;
while (suit<NUM_SUITS)
{
for (rank=NUM_RANKS; rank>7; rank--)
{
if(card_exists[suit][rank])
{royal_consec++;}
}
suit++;
}
if (royal_consec==NUM_CARDS)
royal = true;
}
void print_result(void)
{
if (royal)
printf(\"Royal Flush\");
else if (straight_flush)
printf(\"Straight Flush\");
else if (four)
printf(\"Four of a Kind\");
else if (three && pairs == 1)
printf(\"Full House\");
else if (flush)
printf(\"Flush\");
else if (straight)
printf(\"Straight\");
else if (three)
printf(\"Three of a Kind\");
else if (pairs == 2)
printf(\"Two Pairs\");
else if (pairs == 1)
printf(\"Pair\");
else
printf(\"High Card\");
printf(\"\ \ \");
}
Solution
The following code is running in CodeBlock compiler. (i did some of changes please check in CodeBlock Compiler)
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#define NUM_RANKS 13
#define NUM_SUITS 4
#define NUM_CARDS 5
int num_in_rank[NUM_RANKS];
int num_in_suit[NUM_SUITS];
bool card_exists[NUM_RANKS][NUM_SUITS];
bool royal, flush, littedog, bigdog, littlecat, bigcat, straight, straight_flush, four, three, full_house;
int pairs, stud;
void read_cards(void);
void analyze_hand(void);
void print_result(void);
int main(void)
{
while(1)
{
read_cards();
analyze_hand();
print_result();
}
}
void read_cards(void)
{
char ch, rank_ch, suit_ch;
int rank, suit;
bool bad_card;
int cards_read = 0;
for (rank=0; rank<NUM_RANKS; rank++)
{
num_in_rank[rank] = 0;
for (suit=0; suit<NUM_SUITS; suit++)
card_exists[rank][suit] = false;
}
for (suit=0; suit<NUM_SUITS; suit++)
num_in_suit[suit] = 0;
printf(\"5 Card or 7 Card Stud? (Type 5 or 7): \");
scanf( \"%d\", &stud);
if(stud == 5)
{printf(\"5 Card Stud will be played.\ \");}
else if (stud == 7)
{printf(\"7 Card Stud will be played.\ \");}
else if (stud == 0)
{exit(EXIT_SUCCESS);}
while (getchar() != \'\ \');
while (cards_read<stud)
{
bad_card = false;
printf(\"Enter a card: \");
rank_ch = getchar();
switch (rank_ch)
{
case \'0\':exit(EXIT_SUCCESS);
case \'2\':rank = 0; break;
case \'3\':rank = 1; break;
case \'4\':rank = 2; break;
case \'5\':rank = 3; break;
case \'6\':rank = 4; break;
case \'7\':rank = 5; break;
case \'8\':rank = 6; break;
case \'9\':rank = 7; break;
case \'t\':rank = 8; break;
case \'j\':rank = 9; break;
case \'q\':rank = 10; break;
case \'k\':rank = 11; break;
case \'a\':rank = 12; break;
case \'T\':rank = 8; break;
case \'J\':rank = 9; break;
case \'Q\':rank = 10; break;
case \'K\':rank = 11; break;
case \'A\':rank = 12; break;
default:bad_card = true;
}
suit_ch = getchar();
switch (suit_ch)
{
case \'c\':suit = 0; break;
case \'d\':suit = 1; break;
case \'h\':suit = 2; break;
case \'s\':suit = 3; break;
case \'C\':suit = 0; break;
case \'D\':suit = 1; break;
case \'H\':suit = 2; break;
case \'S\':suit = 3; break;
default:bad_card = true;
}
while ( (ch=getchar()) != \'\ \' )
if (ch != \' \')
bad_card = true;
if (bad_card)
printf(\"Bad card; ignored.\ \");
else if (card_exists[rank][suit])
printf(\"Duplicate card; ignored.\ \");
else
{
num_in_rank[rank]++;
num_in_suit[suit]++;
card_exists[rank][suit] = true;
cards_read++;
}
}
}
void analyze_hand(void)
{
int num_consec = 0, royal_consec = 0, total = 0, sf_consec = 0;
int rank, suit;
straight_flush = false;
straight = false;
flush = false;
four = false;
three = false;
bool littledog = false;
bigdog = false;
littlecat = false;
bigcat = false;
royal = false;
pairs = 0;
for (rank=0; rank<NUM_RANKS; rank++)
{
if (num_in_rank[rank] == 4)
four = true;
if (num_in_rank[rank] == 3)
three = true;
if (num_in_rank[rank] == 2)
pairs++;
}
rank = 0;
while (num_in_rank[rank] == 0)
rank++;
for (rank; rank<NUM_RANKS; rank++)
{
total = total + num_in_rank[rank];
if(num_in_rank[rank] == 0 && total < 7 && stud == 7)
{num_consec = 0;}
else
{num_consec++;}
}
if (num_consec >= NUM_CARDS)
{
straight = true;
return;
}
for (suit=0; suit<stud; suit++)
if (num_in_suit[suit] == NUM_CARDS)
flush = true;
if (straight && flush)
{
suit =0;
while (suit<NUM_SUITS)
{
for(rank==NUM_RANKS; rank >=0; rank-- )
{
if (card_exists[rank][suit])
{sf_consec++;}
else if (!card_exists[rank][suit])
{sf_consec = 0;}
}
}
if (sf_consec >= NUM_CARDS)
straight_flush= true;
}
suit=0;
while (suit<NUM_SUITS)
{
for (rank=NUM_RANKS; rank>7; rank--)
{
if(card_exists[suit][rank])
{royal_consec++;}
}
suit++;
}
if (royal_consec==NUM_CARDS)
royal = true;
}
void print_result(void)
{
if (royal)
printf(\"Royal Flush\");
else if (straight_flush)
printf(\"Straight Flush\");
else if (four)
printf(\"Four of a Kind\");
else if (three && pairs == 1)
printf(\"Full House\");
else if (flush)
printf(\"Flush\");
else if (straight)
printf(\"Straight\");
else if (three)
printf(\"Three of a Kind\");
else if (pairs == 2)
printf(\"Two Pairs\");
else if (pairs == 1)
printf(\"Pair\");
else
printf(\"High Card\");
printf(\"\ \ \");
}
---------------------------------------------------------------------------------------------
If you have any query or still have issue, please feel free to ask.
Thanks a lot.







