尝试生成一副纸牌,而这副纸牌的面值是整数。因此,很明显,对于2-10,值将只是数字2-10,非常简单。如果表面值是3,我会像这样分配它:
card->face = 3;
我的问题出在王牌、杰克、国王和王后。表面值必须始终为int,但A、J、K和Q都是字符,因此我不确定如何分配这些字符。有没有使用ASCII值的方法?
发布于 2021-11-27 01:05:47
char c ;
scanf("%c",&c);
if(c >49 && c < 58 ){
int a = c - 48 ;
printf("%d",a);
}
else {
printd("%c",c) ;
}
发布于 2021-11-27 12:50:08
在C中,字符由小整数表示,小整数是它们在机器字符集中的值。在ASCII中,值1-10并不对应于可打印的字符。所以我们可以同时说
card->face = 3;
将值设置为3,并且
card->face = 'K';
才能让国王。这将导致2-10的值为2-10,王牌、杰克、皇后和国王的值分别为65、74、81和75。
不过,在打印这些值时,您会遇到一个小问题。如果您使用的是printf
,那么对于数值,您可以使用%d
打印它们,但是对于面卡和王牌,您必须使用%c
打印它们。因此,您的打印代码可能如下所示
if(card->face <= 10)
printf("%d", card->face);
else printf("%c", card->face);
注释中建议的另一种可能是使用普通整数1-13存储值,然后使用switch
语句打印特殊的面孔。它可能看起来像这样:
switch(card->face) {
case 1:
printf("A");
break;
case 2: case 3: case 4: case 5: case 6:
case 7: case 8: case 9: case 10:
printf("%d", card->face);
break;
case 11:
printf("J");
break;
case 12:
printf("Q");
break;
case 13:
printf("K");
break;
}
另一种方法是定义一个包含face“names”的字符串数组:
const char *facenames[] = {"A", "2", "3", "4", "5", "6", "7",
"8", "9", "10", "J", "Q", "K"};
然后像这样打印出来:
printf("%s", facenames[card->face]);
在选择这些方法时,另一个问题是,如何输入card->face
的值?如果用户要键入它们,您将需要代码来检测输入是数字还是字母,并正确处理它们。或者,如果您的代码要生成值(也许您将生成一副随机洗牌的纸牌),它可能还需要一些特殊情况。
几乎有第三种可能性可以存储面孔。您可以使用字符'2'
、'3'
和'4'
…,而不是使用整数2-10来表示数字卡片,使用字母'J'
、'Q'
和'K'
来表示面部卡片数字卡也是如此。这将使打印它们变得非常简单,只要
printf("%c", card->face);
没有if
语句、switch
语句或facenames
数组。但问题(致命的问题)是,在这种方案中,没有简单或明显的方法来表示10。(Unicode有字符10、10、10和,但它似乎没有我能找到的简单的"10“,我严重怀疑您是否愿意在玩牌代码中使用Unicode字符。)
https://stackoverflow.com/questions/70129808
复制相似问题