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

标签 c

我目前正在尝试用 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/

相关文章:

c - 伸缩极限输出与预期输出不同

c - 链表实现中的运行时错误

c - 重复符号和应用程序崩溃

c - 新手 : what is wrong with my makefile?

c - 预处理器指令的语言与 C 的语法弱相关是什么意思?

Python 和 C 耦合

c - Eclipse stdio.h 错误

c - 在使用 gdb 运行 exucatble 时使用断点时会在某些地方发生中断

c++ - TerminateThread() with CloseHandle() on thread which uses only stack plain variables (without alloc) 泄漏内存?

c - 使用另一个函数查找最大数字