在C中弹出结构数组

Cri*_*era 1 c arrays struct

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

 struct card{
    char* suit;
    char* face;
 }; 
Run Code Online (Sandbox Code Playgroud)

而甲板上只是一组卡片结构.

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++;
}
Run Code Online (Sandbox Code Playgroud)

套装和面部是具有所有套装和阵列的阵列

const char* SUITS[] = {"Spades", "Diamonds", "Clubs", "Hearts"};

const char* FACE[] = {"ACE", "ONE", "TWO", "THREE", "FOUR","FIVE",
 "SIX", "SEVEN", "EIGHT", "NINE", "TEN", "JACK", "QUEEN", "KING"};
Run Code Online (Sandbox Code Playgroud)

然后我用这种格式的西装打印出甲板

for(cardNum= 0; cardNum < DECKSIZE; cardNum++){
    thisCard = deck[cardNum];
    printf("%s of %s \n",thisCard.face,thisCard.suit);      
}
Run Code Online (Sandbox Code Playgroud)

所以我在这里遇到很多问题.我不确定我制作阵列的方式是否有效.看来,当我这样做时,我不会穿着西装.我知道它编译了一个警告,因为我使用const字符串作为我的常规struct事物.但我不确定为什么它不能很好地工作.

das*_*ght 6

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++;
    }
}
Run Code Online (Sandbox Code Playgroud)

演示.