我在初始化结构时遇到了麻烦(实际上做得很好,但结构先做)。结构首先在标题中生成,如下所示
typedef enum cell
{
BLANK, RED, CYAN
} Cell;
#define NAMELEN 20
typedef struct player
{
char name[NAMELEN + NULL_SPACE];
Cell token;
unsigned score;
} Player;
void initFirstPlayer(Player * player);
void initSecondPlayer(Player * player, Cell token);
#endif
=============================================== ========================
我尝试在这里初始化
void initFirstPlayer(Player * player)
{
int randNo = rand() % 2;
if (randNo == 0) {
token = RED;
}
else() {
token = CYAN;
}
player ; p1 = {
"placeholder",
token,
0,
}
}
void initSecondPlayer(Player * player, Cell token)
{ }
初始化此播放器结构的正确方法是什么?
答案 0 :(得分:1)
我怀疑这对你有用。使用通用initPlayer
函数。用它来为播放器分配内存并设置初始值。确保在完成后freePlayer
功能还包括free()
播放器。
#include <stdlib.h>
#include <string.h>
Player* initPlayer()
{
Player* player = malloc(sizeof(Player));
int randNo = rand() % 2;
if (randNo == 0) {
player->token = RED;
}
else {
player->token = CYAN;
}
const char* initName = "placeholder";
strcpy(player->name, initName);
player->score = 0;
return player;
}
void freePlayer(Player* p)
{
free(p);
}
你使用它的方式是这样的:
int main()
{
Player* p1 = initPlayer();
Player* p2 = initPlayer();
play(p1, p2);
freePlayer(p1);
freePlayer(p2);
}
答案 1 :(得分:0)
假设您至少拥有C99支持,以便可以使用复合文字和指定的初始值设定项,那么您可以使用:
void initFirstPlayer(Player *player)
{
*player = (Player){ .token = rand() % 2 ? CYAN : RED,
.score = 0,
.name = "placeholder"
};
}
这是对其地址传递给函数的变量的结构赋值。它把它压缩成一个声明;如果你愿意,你可以把它分成几个。这是三元? :
运算符有用的场合。你可能更喜欢(rand() % 2)
加括号;我可能会经常添加它们,因为我省略了它们。
复合文字来自(typename){ ...initializer for typename... }
。
指定的初始值设定项为.member = value
符号。
如果你不熟悉C90支持,你必须更加努力,也许用正确的信息创建一个局部变量,然后进行结构分配。
void initFirstPlayer(Player *player)
{
Player p1 = { "placeholder", rand() % 2 ? CYAN : RED, 0 };
*player = p1;
}
现在您有责任以正确的顺序列出初始化程序。
答案 2 :(得分:0)
另一种方法是接收你想要参与的玩家作为参数:
void initPlayer(Player* player)
{
int randNo = rand() % 2;
if (randNo == 0) {
player->token = RED;
}
else {
player->token = CYAN;
}
const char* initName = "placeholder";
strcpy(player->name, initName);
player->score = 0;
}
int main() {
Player p1;
initPlayer(&p1);
}
您可以拥有一系列玩家或使用malloc进行动态分配。