我试图将.xxt文件中的20x20迷宫读入2D数组。 因为fgets也会读取NUL和\ n,所以我每行留出22个字符(迷宫为20个字符)。
然而,它并不像我预期的那样工作。
当我测试此代码只打印一个数组(例如迷宫[0])时,似乎整个文件被复制到一个数组中。
我做错了什么?
#include <stdio.h>
#define BUFLEN 22
int main()
{
FILE *fp = fopen ("maze.txt", "r");
char maze[22][20];
int i = 0;
int j = 0;
for (i=0; i<20; i++){
fgets(maze[i], BUFLEN, fp);
}
for (j=0; j<20; j++){
printf("%s", maze[j]);
}
fclose(fp);
return 0;
}
答案 0 :(得分:3)
您向后声明了自己的数据类型。你需要:
char maze[20][BUFLEN];
这会给你20行&#34;行#34; BUFLEN
个字符。
答案 1 :(得分:0)
首先,如果您有一个包含20个大小为22的缓冲区的数组,则必须声明一个数组char maze[20][22];
,而不是char maze[22][20];
,因为这将显示所有被{{{{}}替换的字符串步行数组时会出现1}个字符。
其次,如果您已使用2*row_index
定义常量,请使用来定义#define BUFLEN 22
。如果您决定稍后更改常量,这将为您省去很多麻烦。这是使用常量定义的。
第三,正如你对char maze[20][BUFLEN];
所做的那样,你可以用BUFLEN
完成,屈服于:
MAZESIZE
然后,您可以更改#define MAZESIZE 20
#define BUFFSIZE ((MAZESIZE) + 2) /* to allow for \n and \0 chars. */
...
char maze[MAZESIZE][BUFSIZE];
常量(或MAZESIZE
,您决定稍后消除BUFFSIZE
的情况),而不必查看您使用它的位置。