繁体   English   中英

将字母分配给 c 中的 int 变量

[英]assigning a letter to an int variable in c

试图生成一副纸牌,而这副纸牌的面值是整数。 很明显,对于 2-10,值只是数字 2-10,非常简单。 如果面值为 3,我将其分配为:

card->face = 3;

我的问题在于 A、J、K 和 Q。 面值总是必须是 int,但 A、J、K 和 Q 是字符,所以我不确定如何分配这些。 有没有办法使用 ASCII 值?

char c ;
scanf("%c",&c);
if(c >49 && c < 58 ){
int a = c - 48 ;
printf("%d",a);
}
else {
printd("%c",c) ;
}

在 C 中,字符由机器字符集中它们的值的小整数表示。 而在 ASCII 中,这是当今几乎所有机器都基于的字符集,值 1-10 不对应于可打印字符。 所以两者都可以说

card->face = 3;

将值设置为 3,并且

card->face = 'K';

设置国王。 这将导致 2-10 的值分别为 2-10,而 Ace、Jack、Queen 和 King 的值分别为 65、74、81 和 75。

但是,在将这些值打印回来时,您会遇到一个小问题。 如果您使用的是printf ,那么对于数值,您可以使用%d打印它们,但对于面卡和 Ace,您必须使用%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;
}

另一种方法是定义一个包含人脸“名称”的字符串数组:

const char *facenames[] = {"A", "2", "3", "4", "5", "6", "7",
                           "8", "9", "10", "J", "Q", "K"};

然后像这样打印它们:

printf("%s", facenames[card->face]);

在这些方法之间进行选择时,另一个问题是,如何输入card->face的值? 如果用户要输入它们,您将需要代码来检测输入是数字还是字母,并正确处理它们。 或者,如果您的代码要生成值(也许您要生成随机洗牌的一副牌),它可能还需要一些特殊情况。

存储人脸几乎有第三种可能性。 与其使用整数 2-10 来表示数字卡片,而使用字母'J''Q''K'来表示面部卡片,您几乎可以使用字符'2''3''4' ……也适用于数字卡。 这将使它们打印出来非常简单,只是

printf("%c", card->face);

没有if语句、 switch语句或facenames 但是问题(致命的问题)是,在那个方案中,没有简单或明显的方式来表示 10。(Unicode 有字符 ⑩、⑽、⒑ 和,但它似乎没有一个简单的“10”我可以找到,而且我严重怀疑您是否想在您的纸牌游戏代码中使用 Unicode 字符。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM