C语言中如何为int变量赋值A、J、Q、K等字符以生成扑克牌牌组
两种实现方案参考
方案1:直接使用ASCII值赋值
是可以用ASCII值实现的,C语言里char类型本质就是整型,你可以直接把字符常量赋值给int类型的face字段:
card->face = 'A'; // 实际存储的是A对应的ASCII值65 card->face = 'J'; // 存储74 card->face = 'Q'; // 存储81 card->face = 'K'; // 存储75
这种写法可读性也不错,判断牌面的时候直接用字符比对即可,比如if (card->face == 'A')。唯一要注意的是要避免和其他数字面值冲突,比如你同时用1代表A的话就会出现逻辑混淆。
方案2:自定义整型映射(更推荐)
绝大多数扑克游戏都需要做牌面大小比较,ASCII值的大小顺序(A=65 < J=74 < K=75 < Q=81)不符合常规的牌面大小规则(A>K>Q>J),所以更建议你提前约定一套映射规则,比如:
- A对应1或14(根据游戏规则定,A比K大就设为14,2最大可以额外设为15)
- J对应11
- Q对应12
- K对应13
赋值示例:
// 规则示例:2=2~10=10,J=11,Q=12,K=13,A=14 card->face = 14; // 对应A card->face = 11; // 对应J
后续需要展示牌面的时候,单独写个转换函数即可:
const char* face_to_str(int face) { switch(face) { case 14: return "A"; case 11: return "J"; case 12: return "Q"; case 13: return "K"; default: static char buf[3]; sprintf(buf, "%d", face); return buf; } }
这种方案扩展性更强,后续做大小比较、分数计算的时候都不用额外做转换处理。
内容的提问来源于stack exchange,提问作者user34343434
相关产品推荐
相关产品推荐

