首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将字母赋值给c中的int变量

将字母赋值给c中的int变量
EN

Stack Overflow用户
提问于 2021-11-26 20:38:05
回答 2查看 66关注 0票数 0

尝试生成一副纸牌,而这副纸牌的面值是整数。因此,很明显,对于2-10,值将只是数字2-10,非常简单。如果表面值是3,我会像这样分配它:

代码语言:javascript
运行
复制
card->face = 3;

我的问题出在王牌、杰克、国王和王后。表面值必须始终为int,但A、J、K和Q都是字符,因此我不确定如何分配这些字符。有没有使用ASCII值的方法?

EN

回答 2

Stack Overflow用户

发布于 2021-11-27 01:05:47

代码语言:javascript
运行
复制
char c ;
scanf("%c",&c);
if(c >49 && c < 58 ){
  int a = c - 48 ;
  printf("%d",a);
}
else {
  printd("%c",c) ;
}
票数 0
EN

Stack Overflow用户

发布于 2021-11-27 12:50:08

在C中,字符由小整数表示,小整数是它们在机器字符集中的值。在ASCII中,值1-10并不对应于可打印的字符。所以我们可以同时说

代码语言:javascript
运行
复制
card->face = 3;

将值设置为3,并且

代码语言:javascript
运行
复制
card->face = 'K';

才能让国王。这将导致2-10的值为2-10,王牌、杰克、皇后和国王的值分别为65、74、81和75。

不过,在打印这些值时,您会遇到一个小问题。如果您使用的是printf,那么对于数值,您可以使用%d打印它们,但是对于面卡和王牌,您必须使用%c打印它们。因此,您的打印代码可能如下所示

代码语言:javascript
运行
复制
if(card->face <= 10)
     printf("%d", card->face);
else printf("%c", card->face);

注释中建议的另一种可能是使用普通整数1-13存储值,然后使用switch语句打印特殊的面孔。它可能看起来像这样:

代码语言:javascript
运行
复制
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”的字符串数组:

代码语言:javascript
运行
复制
const char *facenames[] = {"A", "2", "3", "4", "5", "6", "7",
                           "8", "9", "10", "J", "Q", "K"};

然后像这样打印出来:

代码语言:javascript
运行
复制
printf("%s", facenames[card->face]);

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

几乎有第三种可能性可以存储面孔。您可以使用字符'2''3''4'…,而不是使用整数2-10来表示数字卡片,使用字母'J''Q''K'来表示面部卡片数字卡也是如此。这将使打印它们变得非常简单,只要

代码语言:javascript
运行
复制
printf("%c", card->face);

没有if语句、switch语句或facenames数组。但问题(致命的问题)是,在这种方案中,没有简单或明显的方法来表示10。(Unicode有字符10、10、10和,但它似乎没有我能找到的简单的"10“,我严重怀疑您是否愿意在玩牌代码中使用Unicode字符。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70129808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档