我在过去4个小时左右的时间里一直在研究这个问题,并且无法弄清楚该怎么做。我将我的生命游戏移植到C并且无法让FileIO正常工作。输入文件的格式为:
Game 1: Pattern Name
10 20
// Pattern here
Game 2: Pattern Name
15 25
// Pattern here
依此类推,直到文件结束。我想要做的是打印游戏,并为第一个游戏创建大小为10
和20
的多维数组,然后将模式存储在此数组中。这是我到目前为止所做的:
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[];
但是,我不知道如何为每个行中的行数和列数动态设置参数。
答案 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