从文件中读取两个(2-D)数组

时间:2016-12-10 23:33:38

标签: c

我有一个包含3(2-D)阵列的文件,我需要fscan。

问题是,当我fscan第一个只有它没关系时,但是当我扫描第二个时,第一个的前三个元素会变成空格。

第一个看起来如何:

   0 1 2 3 4 5 6 7 8 9 10 11
0      1 X X X X X X X X  X
1      1 X X X X X X X X  X
2  1 1 1 X X X X X X X X  X
3  X X X X X X X X X X X  X
4  X X X X X X X X X X X  X
5  X X X X X X X X X X X  X
6  X X X X X X X X X X X  X
7  X X X X X X X X X X X  X
8  X X X X X X X X X X X  X
9  X X X X X X X X X X X  X
10 X X X X X X X X X X X  X
11 X X X X X X X X X X X  X

扫描第二个数组后会发生这种情况:

   0 1 2 3 4 5 6 7 8 9 10 11
0        X X X X X X X X  X
1      1 X X X X X X X X  X
2  1 1 1 X X X X X X X X  X
3  X X X X X X X X X X X  X
4  X X X X X X X X X X X  X
5  X X X X X X X X X X X  X
6  X X X X X X X X X X X  X
7  X X X X X X X X X X X  X
8  X X X X X X X X X X X  X
9  X X X X X X X X X X X  X
10 X X X X X X X X X X X  X
11 X X X X X X X X X X X  X

当我扫描第三个元素时,第二个元素也会变成空格。

注意:前两个元素已经是空格,因此您可以看到在这种情况下的更改发生在每个数组的第一行中的第三个元素。

我试图在一个单独的文件中分离每个数组并单独扫描每个数组,但也是同样的问题o.O

void loadGrids(int rows, int columns, char grid[rows][columns],
               int numOfChoosedFile) {

  // getting the name of the file that we just got it's number
  char nameOfChoosedGameFile[FILENAME_MAX];
  snprintf(nameOfChoosedGameFile, FILENAME_MAX, "savedGrid%03d.txt",
           numOfChoosedFile);

  // opening the file that the game is saved in
  FILE *choosedGame = fopen(nameOfChoosedGameFile, "r");
  // reading data
  fseek(nameOfChoosedGameFile, 16, SEEK_SET);
  // this is to skip the first printed before the first array

  int j;
  int i;
  for (i = 0; i < rows; i++) {
    j = 0;
    for (j; j < columns; j++) {
      fscanf(choosedGame, "%d", &grid[i][j]);
      printf("%c ", grid[i][j]);
    }
    printf("\n");
  }

  close(choosedGame);
}

我有两个其他函数,每个函数都读取每个数组。

2 个答案:

答案 0 :(得分:0)

如果必须读取int,请将其读取到临时int中,然后将该值写入数组。 scanf是残酷的:尽管现代编译器会尝试警告您,但如果您告诉它写入4个字节,它将写入。                     –风向标

答案 1 :(得分:0)

此处:

for (j; j < columns; j++) {
      **fscanf(choosedGame, "%d", &grid[i][j]);**
      printf("%c ", grid[i][j]);
    }

您正在读取%d个int,但您的网格为char *,并且当fscanf读取文件时也是char *,因此它将不会读取空白,或者当读取时,将转换空白(字符串)诠释。

%d更改为%c。