【问题标题】:Assigning char to int将 char 分配给 int
【发布时间】:2012-12-10 09:14:31
【问题描述】:

我正在制作扑克游戏,并且我有随机播放功能(基于其他答案 here)。 现在我的问题是,如何将卡片的名称分配给数组的每个数字,例如我想要 cartas[3] = "J spades"

我认为是二维数组,但我认为它们不能有两种不同类型的数据。我希望有人可以帮助我。

/* This is the array, cartas is cards in spanish */
for(i = 0 ; i < 52 ; i++) {
    cartas[i] = i;
}

【问题讨论】:

  • 数组的类型是否为char*!?使用struct!? -_-
  • 同意迪玛。即,使 cartas 拥有一个具有两个成员的结构——一个成员是 cartas.name,另一个是 cartas.i。
  • 根本不存储名称。只需在需要时查找正确的名称。

标签: c arrays for-loop multidimensional-array poker


【解决方案1】:

在需要时查找或生成卡的名称 - 无需将其与索引一起存储:

char buffer[32];
int cnum = card % 13;
const char* suits[]={"diamonds", "spades", "clubs", "hearts"};
switch(cnum)
{
    case 0:
        strcpy(buffer, "ace");
        break;
    case 10:
        strcpy(buffer, "jack");
        break;
    case 11:
        strcpy(buffer, "queen");
        break;
    case 12:
        strcpy(buffer, "king");
        break;
    default:
        sprintf(buffer,"%d",cnum+1);
        break;
}
strcat(buffer," of ");
strcat(buffer,suits[card / 13]);

【讨论】:

  • itoa() 是非标准的,实际上在很多系统上并不存在。您可以使用sprintf(buffer, "%s", cnum+1)。但是,例如,用数字6 表示黑桃 5 必然会引起混淆。我会用1 表示王牌,2 表示 2,...,13 表示国王。
  • 关于使用itoa 的公平点,虽然它应该是%d 而不是%s。另一点只是在模数之后加 1,而不是几行之后,我认为这只是一个品味问题——无论如何,卡片仍然由相同的索引表示。我已经离开了,但其他人可能想以不同的方式来做。
  • 你是对的,应该是%d。 (太糟糕了,我无法编辑评论。)
猜你喜欢
  • 2018-02-03
  • 2021-12-17
  • 2023-03-26
  • 2023-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-15
相关资源
最近更新 更多