2013-10-19 2 views
2

저는 지난 4 시간 정도 작업을 해왔으므로 어떻게해야할지 알 수 없습니다. 내 Game of Life를 C로 포팅 했으므로 FileIO가 제대로 작동하지 않습니다. 입력 파일의 형식은 다음과 같습니다.Game Of Life, FileIO 보드 저장

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

등등. 파일 끝까지. 게임을 인쇄하고 첫 번째 게임에 대해 크기가 1020 인 다차원 배열을 만든 다음 패턴을이 배열에 저장합니다. 내가 가장 좋은 방법은 있다고 생각

Creating a dynamic global multi-dimensional array

Preventing the buffer from reading into the next game

,

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); 
    } 
} 

그리고 여기 벽에 충돌, 문제의 목록에 실행 어디 : 여기에 지금까지 가지고 무엇을 이렇게하려면 각 게임에 대해 struct 배열을 만드는 것이 좋을 것입니다.

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

관련 문제