gpt4 book ai didi

c - 如何存储从 C 文件中读取的结构?

转载 作者:行者123 更新时间:2023-12-04 18:19:16 26 4
gpt4 key购买 nike

我想出了一个学习 C 的项目,但我有点碰壁了。
该项目只是一个纸牌游戏,其中玩家有两套卡片,一套是一套大小的套牌,另一套是他们的卡片集合,可以根据需要做大。
卡片结构如下:

struct card {   
char name[256];
char special[256];
char type[100];
char rarity[100];
int points;
};

然后我有一个名为 coll.txt 的集合文件
first card goes here 50
second card goes here 70
...

然后我有一个(草率的)函数从文件中读取并将其存储到临时卡中:
void read_into_collection(FILE *f) {
char *file_text;
char *token;
int i;
struct card temp;

file_text = (char *) malloc(sizeof(struct card));

while(fgets(file_text, sizeof(struct card), f)) {
for(i = 1, token = strtok(file_text, " "); token; i++, token = strtok(NULL, " ")) {
switch (i) {
case 1:
strcpy(temp.name, token);
break;
case 2:
strcpy(temp.special, token);
break;
case 3:
strcpy(temp.type, token);
break;
case 4:
strcpy(temp.rarity, token);
break;
case 5:
temp.points = atoi(token);
break;
default:

i = 0;
break;
}
}
}


free(file_text);
}

所以到时候 i = 6我准备将临时卡移动到集合中,并将下一张卡读入临时变量,依此类推。但是我该怎么做呢?我无法弄清楚实际上应该是什么集合。一开始我以为:
struct card *collection = (struct card *) malloc(number_of_cards * sizeof(struct card));

但是,如果我是正确的, malloc()返回一个指向一 block 内存的指针,并且内存不像数组那样顺序,所以我不能增加指针来存储卡片。

我还尝试计算文件中的行数(每行是一张卡片),然后制作一个该大小的数组,但我得到一个错误,即该值不是恒定的。

将这些卡片作为收藏品存储的最佳方式是什么?我只想让集合成为一个非常大的数组,但我觉得这种情况经常出现在项目中,我宁愿学习如何处理它而不是采取简单的方法。

最佳答案

But, if I am correct, malloc() returns a pointer to a chunk of memory and the memory is not sequential like an array, so I cannot increment the pointer to store cards.



错误的。它是顺序的。您可以使用 malloc()创建任何东西的数组:
mystruct* ptr = (mystruct*) malloc(sizeof(mystruct) * numberOfStructs)

for(int i = 0; i < numberOfStructs, i++) {
ptr[i].setSomeInfo(x);
}

这是在 C 中执行此操作的标准方法。

关于c - 如何存储从 C 文件中读取的结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11020275/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com