将字母分配给c中的int变量
Posted
技术标签:
【中文标题】将字母分配给c中的int变量【英文标题】:assigning a letter to an int variable in c 【发布时间】:2022-01-04 20:00:29 【问题描述】:试图生成一副纸牌,而纸牌的面值是整数。很明显,对于 2-10,值只是数字 2-10,非常简单。如果面值为 3,我将其分配为:
card->face = 3;
我的问题在于 A、J、K 和 Q。面值总是必须是 int,但 A、J、K 和 Q 是字符,所以我不确定如何分配这些。有没有办法使用 ASCII 值?
【问题讨论】:
你为什么不把它们编号为 1、11、12、13?这可能是最简单的代码。 我赞同 Klas-Kenny 的评论。将卡片存储为从 1 到 13 的数字听起来是最合理的解决方案。如果您以后确实需要将它们打印为字符或其他内容,您可以使用单个开关盒创建一个函数,该函数将根据卡值产生一些东西。如果您出于某种原因不喜欢或不能使用此解决方案,您可以随时将字母本身分配给整数,如下所示:int x = 'K';
(它们的 ASCII 值不会与 2-10 重叠,因此可以使用)跨度>
要将卡片值(1 到 13)转换为可打印的值,您可以使用 Galbatrollix 建议的 switch
,或者可能更合适的字符数组(用于单字符输出)或字符串数组(用于多字符输出),使用卡片值作为索引。
【参考方案1】:
char c ;
scanf("%c",&c);
if(c >49 && c < 58 )
int a = c - 48 ;
printf("%d",a);
else
printd("%c",c) ;
【讨论】:
永远不要使用像 48 这样的幻数。改用'0'
另外,除了代码,请注意您在 Stack Overflow 上的格式。在为编译器编写代码时,您的缩进可能只是一种任意的风格偏好,但您正在编写供人类阅读的代码。
@JeremyCaney 代码应该始终写成供人类阅读。 IME 缩进不佳表明编写代码所涉及的所有方面都付出了努力......
@AndrewHenle:当然,你在这两方面都绝对正确!【参考方案2】:
在 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);
如 cmets 中所建议的,另一种可能性是使用普通整数 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 字符。)
【讨论】:
以上是关于将字母分配给c中的int变量的主要内容,如果未能解决你的问题,请参考以下文章