我创建了一个结构项:
typedef struct item
{
char name[20];
char desc[100];
int lp;
int shield;
int weapon;
} item;
我需要36个,所以我创建了一个数组item treasure[6][6];
对于每个项目,我按如下方式插入数据:
strcpy(treasure[0][0].name, "name");
strcpy(treasure[0][0].desc, "none");
treasure[0][0].lp = 0;
treasure[0][0].shield = 0;
treasure[0][0].weapon = 200;
我这样做36次并在编辑器中占用了大量空间,我的问题是:我可以将它放在单独的.c / .h文件中吗?我一直在尝试,但无法使其发挥作用。
感谢您的帮助!
答案 0 :(得分:2)
我建议使用带有以下内容的文件,例如 init.h
#include <string.h>
typedef struct item {
char name[20];
char desc[100];
int lp;
int shield;
int weapon;
} item;
item treasure[1][1] = {
{{.name = "name", .desc = "none", .lp = 0, .shield = 0, .weapon = 200}}};
以这种方式,您必须能够在另一个文件中初始化矩阵6,6的结构,然后您必须能够从主程序中访问它,如下所示:
#include "init.h"
#include <stdio.h>
int main() {
printf("%s\n", treasure[0][0].name);
return 0;
}
我希望这对你有用,还有另一种初始化结构的方法,但这个是我经常使用的。您可以在这里找到更多信息 https://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html
答案 1 :(得分:0)
如果您想从一开始就学习如何进行正确的C程序设计,那么就是这样。
执行此操作的正确方法是创建item.h和item.c文件。他们一起组成了一个“代码模块”(或类,如果你愿意的话)。
您的头文件item.h应包含typedef和header guard。你也应该写一个初始化函数。
// item.h
#ifndef ITEM_H
#define ITEM_H
#include <string.h>
typedef struct {
char name[20];
char desc[100];
int lp;
int shield;
int weapon;
} item_t;
void item_init (item_t* item,
const char name[20],
const char desc[100],
int lp,
int shield,
int weapon);
#endif
然后,您可以在init.c中实现init函数:
// item.c
#include "item.h"
void item_init (item_t* item,
const char name[20],
const char desc[100],
int lp,
int shield,
int weapon)
{
strcpy(item->name, name);
strcpy(item->desc, desc);
item->lp = lp;
item->shield = shield;
item->weapon = weapon;
}
这两个文件init.h和init.c只关注所有item_t
变量的行为。您可以随时使用更多功能扩展它们。它们不会也不应包含任何实际数据。
现在,如果您想将数据分开,可以像这样为它创建一对单独的文件:
// item_data.h
#include "item.h"
#define ITEMS_N 36
item_t* item_data_get (int item_n);
这只是一个“getter”功能,可让您访问数据。实际数据是封装在.c文件中:
// item_data.c
#include "item_data.h"
static item_t items [ITEM_N] =
{
[0] = {.name="name", .desc="none", .lp=0, .shield=0, .weapon=200},
[1] = ... // fill up data here
};
item_t* item_data_get (int item_n)
{
return items[n];
}
如果您以后想要更改给定项目的数据,可以通过调用item_init(item_data_get(n), ...);