gpt4 book ai didi

c - 将 config.txt 数据保存在双向链表中

转载 作者:太空宇宙 更新时间:2023-11-04 04:14:01 25 4
gpt4 key购买 nike

我目前正在尝试用 c 语言创建一个基于控制台的单人纸牌游戏。我想要一个 txt 文件来“模拟牌组”,这意味着配置文件应该包含从黑色 A、2、3、4.... 到红色 J、Q、K.... 的所有卡片。

我成功读取并标记了我的配置文件,但我对如何将“卡片”保存在双向链表中一无所知。

这是我到目前为止编写的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


typedef struct card
{
char color;
int value;
char name[2];
struct card * prev;
struct card * next;
} CARD_TYPE;


int main(int argc, char *argv[])
{
for (int i = 0; i < argc; i++)
{
printf("argv[%d] = %s\n", i, argv[i]);
}

int counter_red = 0;
int counter_black = 0;

char buffer[255];


FILE* path = fopen (argv[1],"r");

if (path == NULL)
{
printf("[ERR] Invalid file!\n");
return 3;
}

while(fgets(buffer, 255, path) != NULL )
{
if (strlen(buffer) == 1) //string is empty
{
continue;
}
CARD_TYPE* temp = malloc(sizeof(CARD_TYPE));//DONT FORGET TO FREE
temp->color = '\0';
temp->name[0] = '\0';

char *read = strtok(buffer," ");
while (read != NULL)
{
if (strcmp (read, "BLACK" ) == 0 )
{
counter_black ++;
}
else if (strcmp (read, "RED" ) == 0 )
{
counter_red ++;
}
printf("%s", read);
read = strtok(0, " ");

}

}

if (counter_black != 13)
{
printf("[ERR] Invalid file!\n");
}

所以现在我想以正确的顺序保存卡片(与文件中的顺序完全相同)。

是否可以在一个循环中完成所有这些操作?

非常感谢任何帮助!

最佳答案

您有一个 CARD_TYPE*​​ temp 需要(更好地命名并)填充。您正在浏览缓冲区,并检查缓冲区中的卡片是否为黑色。所以你要设置你的卡的值。所以:

while (read != NULL)
{
if (strcmp (read, "BLACK" ) == 0 )
{
temp->color = // what goes here?
counter_black ++;

然后你需要找出它是什么卡等级。您需要文件中的更多信息。你是怎样做的? (如果信息没有意义怎么办?这东西怎么会失败?)。现在 prev 和 next 指针只是 NULL。

然后你需要把这张临时卡片加入到一个双向链表中。您可能应该在某处声明一个列表。我们称它为

CARD_TYPE* deck;

一旦你制作好牌组,就可以简单地将其设置为第一张牌。但这是一个列表。所以你从文件中读取的第二张卡片将被设置为……什么?卡片去哪儿了? (您将要创建一个单独的函数来将卡片添加到列表中。分配一些空间并更新列表并使其处于有效状态的东西。)

并且您的老师提醒您在完成内存后释放所有内存。在退出程序之前,遍历列表并将其全部释放是一种很好的做法。这样你就可以选择这段代码并在别处使用它,它不会位于 main.c 的顶部

关于c - 将 config.txt 数据保存在双向链表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53874005/

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