我有一个名为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
你可以看到并没有保存整个迷宫。
答案 0 :(得分:1)
这不是跳过空白。你永远不会增加j
。
if(element == '\n')
语句中的代码应如下所示:
if(element == '\n'){
j++;
i = 0;
continue;
}
如果您已将变量命名为x
和y
而不是i
和j
,那么您可能已经自己找到了。
你的地图显示功能完全错误,应该是:
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");
}