通过char读取文件char并将数据存储到bidimentional数组C.

时间:2015-08-13 09:58:45

标签: c arrays

我有一个名为map.txt的文件,如下所示:

xxxxxxxxxxxxxxxxxx
x  Ox xx         x
x  xx xx xxxxxx  x
xx            x  x
x xxxx  x  x  x  x
x       x     x  x
x  x    x  x  x  x
x  x             x
x  x    x  x  x  x
x                x
xxxxxxxxxxxxxxxxxx

它代表一个迷宫。我必须通过char读取此文件char并将其存储在二维数组char data [][]中,但我在使用fgetc时遇到问题。这是我的代码:

int readMapFromFile(char *filename) {
    FILE *file = fopen(filename, "r");
    char element;
    printf("reading map from file %s...\n", filename);
    int c;

    if(file == NULL)
        return 1;

    int j =0;
    int i =0;

    while((c = fgetc(file))!= EOF) {
        element = (char) c;
        if(element == '\n') {
            j = 0;
            i++;
            continue;
        } else if(element == 'O') {
            player.exitX = j;
            player.exitZ = i;
        }
        data[i][j] = element;
        j++;
    }

    fclose(file);
    return 0;
}

它似乎跳过了空白,我不知道如何让它工作。 作为请求,我添加了如何显示数据的内容:

int i;
int j;
for (i =0 ; i < map.x ; ++i);
{
    for(j = 0 ; j < map.z ; ++j) {
        printf("%s \n", &data[i][j]);
    }
}

预期产出:

xxxxxxxxxxxxxxxxxx
x  Ox xx         x
x  xx xx xxxxxx  x
xx            x  x
x xxxx  x  x  x  x
x       x     x  x
x  x    x  x  x  x
x  x             x
x  x    x  x  x  x
x                x
xxxxxxxxxxxxxxxxxx

我的输出:

xxxxxxxxxxxxxxxxxxxOxxxxxxxxxxxxxxxxxxxxxxx

你可以看到并没有保存整个迷宫。

1 个答案:

答案 0 :(得分:1)

这不是跳过空白。你永远不会增加j

if(element == '\n')语句中的代码应如下所示:

if(element == '\n'){
    j++;
    i = 0;
    continue;
}

如果您已将变量命名为xy而不是ij,那么您可能已经自己找到了。

你的地图显示功能完全错误,应该是:

  int i;
  int j;

  for (i = 0 ; i < map.x ; ++i) {
    for(j = 0 ; j < map.y ; ++j) {
      printf("%c", data[i][j]);
    }
    printf ("\n");
  }