C 函数生成一个;卡片“;使用结构数组
我在这里有一个功能,我正在制作一副牌。最后,我让它打印每个卡片结构中的内容,但它打印奇怪的字符C 函数生成一个;卡片“;使用结构数组,c,arrays,string,struct,C,Arrays,String,Struct,我在这里有一个功能,我正在制作一副牌。最后,我让它打印每个卡片结构中的内容,但它打印奇怪的字符 #include <stdio.h> #include <string.h> #define DECK 52 #define RANK 8 #define SUIT 15 /* SpEcIaL VaRiAbLeS */ struct card{ char rank[RANK]; char suite[SUIT]; } card; enum sui
#include <stdio.h>
#include <string.h>
#define DECK 52
#define RANK 8
#define SUIT 15
/* SpEcIaL VaRiAbLeS */
struct card{
char rank[RANK];
char suite[SUIT];
} card;
enum suites{
SPADES, DIAMONDS, CLUBS, HEARTS};
/* ***************************Prototypes ************************/
void deck_fill( struct card blank_deck[] );
这就是所讨论的功能。希望在这篇文章的结尾,我的牌组中充满了“牌”
/*定义*/
空白卡片组填充(结构卡片空白卡片组[])
{
结构卡*卡片组更改=&空白卡片组;
int i,k,j;
而(k<4)
{
k=0;
对于(i=0;i<13;i++)
{
开关(k)
{
案例(0):
memcpy(deck_change[i].组曲,“黑桃”,6);
打破
案例(1):
memcpy(甲板变更[i+13],套房,“钻石”,8);
打破
案例(2):
memcpy(甲板变更[i+26]。套房,“俱乐部”,5);
打破
案例(3):
memcpy(deck_change[i+39]),组曲《红心》,6);
打破
}
}
k++;
}
甲板改变[甲板]=0;
}
运行时,它会打印“卡是R1S或(某些奇怪的东西)”字样。
为什么?尝试使用此deck\u fill()函数。别忘了提高等级
void deck_fill(struct card blank_deck[])
{
struct card *deck_change = blank_deck;
int i, j;
int k = 0;
char index[2];
char c;
while (k < 4)
{
for (i = 0; i < 13; i++)
{
switch(k)
{
case (0):
strncpy(deck_change[i].suite, "SPADES", 6);
deck_change[i].rank = i;
break;
case (1):
strncpy(deck_change[i+13].suite, "DIAMONDS", 8);
deck_change[i+13].rank = i;
break;
case (2):
strncpy(deck_change[i+26].suite, "CLUBS", 5);
deck_change[i+26].rank = i;
break;
case (3):
strncpy(deck_change[i+39].suite, "HEARTS", 6);
deck_change[i+39].rank = i;
break;
}
}
k++;
}
//deck_change[DECK] = 0;
}
要求家庭作业帮助的问题必须包括到目前为止您为解决问题所做工作的总结,以及您解决问题的困难的描述。删除此行中的
&
:struct card*deck_change=&blank_deck代码>请阅读:.memcpy(甲板改变[i].套房,“黑桃”,6)代码>-->memcpy(deck_change[i].组曲,“黑桃”,7)代码>。也k=0代码>移动到while-loop之前。发布的代码包含一些“神奇”数字神奇的数字是没有基础的数字。即0,1,2,3,13.'“魔法”数字使代码更难理解、调试等。建议使用#define
语句或enum
语句为这些“魔法”数字指定有意义的名称,然后在整个代码中使用这些名称。注意:对于值0、1、2、3,已经存在enum suites
如果我这样做,我将如何处理Ace、Jack等,这就是我使用char数组的原因,我没有对数字进行任何计算
/* Definitions */
void deck_fill( struct card blank_deck[] )
{
struct card *deck_change = &blank_deck;
int i, k, j;
while (k < 4)
{
k = 0;
for (i = 0; i < 13; i++)
{
switch(k)
{
case (0):
memcpy(deck_change[i].suite, "SPADES", 6);
break;
case (1):
memcpy(deck_change[i+13].suite, "DIAMONDS", 8);
break;
case (2):
memcpy(deck_change[i + 26].suite, "CLUBS", 5);
break;
case (3):
memcpy(deck_change[i + 39].suite, "HEARTS", 6);
break;
}
}
k++;
}
deck_change[DECK] = 0;
}
void deck_fill(struct card blank_deck[])
{
struct card *deck_change = blank_deck;
int i, j;
int k = 0;
char index[2];
char c;
while (k < 4)
{
for (i = 0; i < 13; i++)
{
switch(k)
{
case (0):
strncpy(deck_change[i].suite, "SPADES", 6);
deck_change[i].rank = i;
break;
case (1):
strncpy(deck_change[i+13].suite, "DIAMONDS", 8);
deck_change[i+13].rank = i;
break;
case (2):
strncpy(deck_change[i+26].suite, "CLUBS", 5);
deck_change[i+26].rank = i;
break;
case (3):
strncpy(deck_change[i+39].suite, "HEARTS", 6);
deck_change[i+39].rank = i;
break;
}
}
k++;
}
//deck_change[DECK] = 0;
}
struct card{
int rank;
char suite[SUIT];
} card;