gpt4 book ai didi

c - 在 C 中将字符输入数组 - 跟进

转载 作者:太空宇宙 更新时间:2023-11-03 23:36:37 26 4
gpt4 key购买 nike

这是我之前问过的一个关于计算直手的问题的后续问题......不完全一样......这是读牌的方法 - 它有效 - 但有没有更好的方法 - 做这在 C 中使用控制台输入 ...

void read_cards(int num_in_rank[], int num_in_suit[])
{
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++;
}
}
}

我知道 case 语句可以有一些优化 - 即使用礼帽;更好地表示卡值等。请提出建议。该代码反射(reflect)了 C99...

最佳答案

代码对我来说看起来不错。在我看来,它实际上做得很好并且可读。

您似乎在询问优化 - 在您确定需要优化之前不要担心优化,否则它只会使您的代码更难阅读并且更容易出现错误。特别是,此函数将花费超过 99.99% 的运行时间来等待用户键入,因此无需对其进行优化。

我认为使用 fall-through 来捕获 switch 语句中的大写和小写输入不一定是坏事,尤其是在你拥有的情况很少的情况下。只需多输入一些内容。

如果这段代码确实存在问题并且它没有编译或没有按预期执行,请描述问题。

编辑:您可能想要更改的唯一一件事是摆脱等级 0-9 的显式案例,而是将它们全部组合成一个 fall through case with body:

rank = rank_ch - '0';

这是一个相对常见的 C 惯用语,用于将作为字符存储的数字转换为整数,因此阅读它的其他程序员应该很清楚。

关于c - 在 C 中将字符输入数组 - 跟进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1049639/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com