我正在制作一副牌卡片是结构

 struct card{
    char* suit;
    char* face;
 };

而牌组将是一系列的牌结构。
for(s = 0; s < sizeof(SUITS); s++){
    for(f = 0; f < sizeof(FACE); f++){

    thisCard.suit = SUITS[s];
    thisCard.face = FACE[f];
    deck[cardNum]=thisCard;
    cardNum++;
}

西服和脸是所有西服和脸的阵列
const char* SUITS[] = {"Spades", "Diamonds", "Clubs", "Hearts"};

const char* FACE[] = {"ACE", "ONE", "TWO", "THREE", "FOUR","FIVE",
 "SIX", "SEVEN", "EIGHT", "NINE", "TEN", "JACK", "QUEEN", "KING"};

然后我用这套西装的式样打印出这副牌
for(cardNum= 0; cardNum < DECKSIZE; cardNum++){
    thisCard = deck[cardNum];
    printf("%s of %s \n",thisCard.face,thisCard.suit);
}

所以我这里有很多问题我不确定我制作数组的方式是否有效当我这样做的时候,我似乎没有骑自行车穿过西装我知道它编译时会发出警告,因为我在常规结构中使用了常量字符串。但我不知道为什么它不好用。

最佳答案

sizeof(SUITS)以字节为单位提供SUITS的大小另一方面,循环需要SUITS中的条目数,而不是字节数计算数组元素计数的常用技巧是将sizeof(SUITS)除以sizeof(SUITS[0])

for(s = 0; s < sizeof(SUITS)/sizeof(SUITS[0]); s++) {
    for(f = 0; f < sizeof(FACE)/sizeof(FACE[0]); f++) {
        deck[cardNum].suit = SUITS[s];
        deck[cardNum].face = FACE[f];
        cardNum++;
    }
}

Demo.

07-24 09:30