用C写的一个输入牌数,分析牌大小,输出结果的小程序,却达不到料想结果,希望各位大神给看看
用C写的一个输入牌数,分析牌大小,输出结果的小程序,却达不到预想结果,希望各位大神给看看
//这是一个纯C程序,会要求你输入5张牌,然后分析,根据同花顺 四张一样 三张一样和一对 。。。来比较大小,其中牌色分别用c d h s 表示 比如输入为
/*
Enter a card:3s
Enter a card:5s
Enter a card:6s
Enter a card:2s
Enter a card:4s
输出应为
Straight Flush
可是我的程序却输出为
Flush
经判定我的判定Straight==true 不工作,希望各位大神给看看,给修改下。。。
*/
#include<stdio.h>
#include<stdbool.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 straight,flush,four,three;
int pairs;
void read_cards(void);
void analyze_hand(void);
void print_result(void);
int main(void)
{
for(;;)
{
read_cards();
analyze_hand();
print_result();
}
}
//输入牌张函数
void read_cards(void)
{
_Bool card_exists[NUM_RANKS][NUM_SUITS];
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;
}
while (cards_read<NUM_CARDS)
{
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': case 'T': rank = 8; break;
case 'j': case 'J': rank = 9; break;
case 'q': case 'Q': rank = 10; break;
case 'k': case 'K': rank = 11; break;
case 'a': case 'A': rank = 12; break;
default : bad_card = true ;
}
suit_ch = getchar();
switch (suit_ch)
{
case 'c': case 'C': suit = 0;break;
case 'd': case 'D': suit = 1;break;
case 'h': case 'H': suit = 2;break;
case 's': case 'S': suit = 3;break;
default: bad_card = true;
}
while((ch = getchar()) != '\n')
{
if (ch != ' ')
bad_card = true;
}
if(bad_card)
{
printf("Bad Card;Ignored. \n");
}
else if (card_exists[rank][suit])
{
printf("Duplicate card; Ignored \n");
}
else
{
num_in_rank[rank]++;
num_in_suit[suit]++;
card_exists[rank][suit] = true;
cards_read++;
}
}
}
//分析牌大小
void analyze_hand(void)
{
int num_consec = 0;
int rank,suit;
straight = false;
flush = false;
four = false;
three = false;
//这是一个纯C程序,会要求你输入5张牌,然后分析,根据同花顺 四张一样 三张一样和一对 。。。来比较大小,其中牌色分别用c d h s 表示 比如输入为
/*
Enter a card:3s
Enter a card:5s
Enter a card:6s
Enter a card:2s
Enter a card:4s
输出应为
Straight Flush
可是我的程序却输出为
Flush
经判定我的判定Straight==true 不工作,希望各位大神给看看,给修改下。。。
*/
#include<stdio.h>
#include<stdbool.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 straight,flush,four,three;
int pairs;
void read_cards(void);
void analyze_hand(void);
void print_result(void);
int main(void)
{
for(;;)
{
read_cards();
analyze_hand();
print_result();
}
}
//输入牌张函数
void read_cards(void)
{
_Bool card_exists[NUM_RANKS][NUM_SUITS];
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;
}
while (cards_read<NUM_CARDS)
{
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': case 'T': rank = 8; break;
case 'j': case 'J': rank = 9; break;
case 'q': case 'Q': rank = 10; break;
case 'k': case 'K': rank = 11; break;
case 'a': case 'A': rank = 12; break;
default : bad_card = true ;
}
suit_ch = getchar();
switch (suit_ch)
{
case 'c': case 'C': suit = 0;break;
case 'd': case 'D': suit = 1;break;
case 'h': case 'H': suit = 2;break;
case 's': case 'S': suit = 3;break;
default: bad_card = true;
}
while((ch = getchar()) != '\n')
{
if (ch != ' ')
bad_card = true;
}
if(bad_card)
{
printf("Bad Card;Ignored. \n");
}
else if (card_exists[rank][suit])
{
printf("Duplicate card; Ignored \n");
}
else
{
num_in_rank[rank]++;
num_in_suit[suit]++;
card_exists[rank][suit] = true;
cards_read++;
}
}
}
//分析牌大小
void analyze_hand(void)
{
int num_consec = 0;
int rank,suit;
straight = false;
flush = false;
four = false;
three = false;