生命游戏,FileIO存储板

时间:2013-10-19 23:26:30

标签: c arrays file-io

我在过去4个小时左右的时间里一直在研究这个问题,并且无法弄清楚该怎么做。我将我的生命游戏移植到C并且无法让FileIO正常工作。输入文件的格式为:

Game 1: Pattern Name
10 20
// Pattern here
Game 2: Pattern Name
15 25
// Pattern here

依此类推,直到文件结束。我想要做的是打印游戏,并为第一个游戏创建大小为1020的多维数组,然后将模式存储在此数组中。这是我到目前为止所做的:

void fileIO() {
    FILE *file;
    char buffer[BUFFER_SIZE];
    int rows = 0, cols = 0;

    file = fopen("input.txt", "r");

    if(file == NULL) {
            printf("Error opening file.");
    } else {
            while(fgets(buffer, BUFFER_SIZE, file) != NULL) {
                    if(strstr(buffer, "Game") != NULL) {
                            printf("%s", buffer);
                    } else {
                            sscanf(buffer, "%d%d", &rows, &cols);
                    }
            }
            fclose(file);
    }
}

这就是我碰壁的地方,并遇到了一系列问题,

Creating a dynamic global multi-dimensional array

Preventing the buffer from reading into the next game

我认为最好的方法是为每个游戏创建一个结构数组,如

struct game {
    char board[][];
};

struct game games[];

但是,我不知道如何为每个行中的行数和列数动态设置参数。

1 个答案:

答案 0 :(得分:3)

我是一个相对较新的C程序员,但我想我可以帮助动态数组。 C在编译期间初始化数组,如果需要动态设置它们则不起作用。所以不要使用像:

这样的符号
char board[][];

您需要使用指针并根据所需的数组大小分配内存。这是使用malloc函数完成的。例如:

#include<stdlib.h>

int i;
char **board;
board = malloc(rows * sizeof board[0]);

for(i = 0; i<rows; i++){
board[i] = malloc(columns * sizeof board[0][0]);

如果你还没有学习指针和内存分配,那么我不确定这对你有多大帮助。我不完全理解你要做的是什么,所以我不能给你一个代码的具体例子,但这是一种动态分配数组的更通用的方法。就像我说我是C的初学者所以如果这没有帮助我道歉。这是一个很好的链接,有助于理解指针。

http://en.wikibooks.org/wiki/C_Programming/Pointers_and_arrays