Save/Load C语言函数

Save/Load function in C language

我正在开发一个游戏程序,它要求我将一个二维数组保存到一个文件中,然后如果用户想返回那个游戏,然后可以重新加载它并继续它。但是我在将数组保存到 txt 文件时遇到了问题。对于加载函数,它无法加载任何东西。用户应该 select 加载选项,它应该能够调用带有数组的 txt 文件,然后允许他们继续玩游戏。

这是我的保存功能

void save(char *filename)
{
    FILE *fp = fopen(filename, "wb");
    fwrite(&size, sizeof(size), 1 , fp);
    fwrite(board, sizeof(int), size, fp);

    if(fp == NULL)
        return;

    fclose(fp);
}

这是我的加载函数

  void load(char *filename)
{
    FILE *fp = fopen(filename, "rb");
    fread(&size, sizeof(size), 1 , fp);
    fread(board, sizeof(int), size, fp);

    if(fp == NULL)
        return;

    fclose(fp);
}

稍后在代码中,我使用菜单调用这些函数。 任何帮助将不胜感激!

首先,加载时写RB。其次,不要忘记在输入 FILE 命令后关闭所有文件。

另外,我有一个建议给你:总是检查 *fp 是否等于 NULL;它非常适合调试,并且会对您的代码产生巨大影响。您也可以在程序中使用文件时编写一个用于多次检查的函数。

board 不是二维数组,它是指向行的指针数组。您需要遍历它,分别写入和读取每一行。

由于正在加载的板子的大小可能与当前内存中的板子不同,加载时需要释放旧的板子,重新分配新的板子。

void save(char *filename)
{
    FILE *fp = fopen(filename, "wb");
    if (!fp) {
        perror("Can't open save file");
        return;
    }
    fwrite(&size, sizeof(size), 1 , fp);
    for (int i = 0; i < size; i++) {
        fwrite(board[i], sizeof(*board[i]), size, fp);
    }
    fclose(fp);
}

void load(char *filename)
{
    FILE *fp = fopen(filename, "r");
    if (!fp) {
        perror("Can't open save file");
        return;
    }
    if (board) {
        for (int i = 0; i < size; i++) {
            free(board[i]);
        }
        free(board);
    }
    fread(&size, sizeof(size), 1 , fp);
    board = malloc(size * sizeof(*board));
    for (int i = 0; i < size; i++) {
        board[i] = malloc(size * sizeof(*board[i]));
        fread(board[i], sizeof(*board[i]), size, fp);
    }
    fclose(fp);
}