2013-10-19 55 views
2

我一直對這個在過去的4個小時左右,並不能弄清楚該怎麼做。我將我的人生遊戲移植到C,無法讓FileIO正常工作。輸入文件的格式爲:遊戲人生,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[]; 

不過,我不知道如何動態地設置參數的行和列的每一個量。

回答

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