C语言 从文件读取到二维数组



我试图从.txt文件读取20x20迷宫到2D数组。因为fgets也读取NUL和n,所以我为每行留出了22个字符的空间(迷宫为20个字符)。

然而,它并没有按我想要的方式工作。

当我测试这段代码只打印一个数组(例如maze[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;

}

您反向声明了数据类型。你需要:

char maze[20][BUFLEN];

这将给你20"行"的BUFLEN字符。

首先,如果您有一个包含20个大小为22的缓冲区的数组,则必须声明一个数组char maze[20][22];,而不是char maze[22][20];,因为这将显示您在遍行数组时被2*row_index字符替换的所有字符串。

第二,如果你用#define BUFLEN 22定义了一个常量,请使用来定义char maze[20][BUFLEN];。如果您决定稍后更改常数,这将为您节省很多麻烦。这是定义常量的用途。

第三,正如你对BUFLEN所做的那样,你也可以对MAZESIZE做,产生:

#define MAZESIZE 20
#define BUFFSIZE ((MAZESIZE) + 2) /* to allow for n and  chars. */
...
char maze[MAZESIZE][BUFSIZE];

然后,您可以更改MAZESIZE常量(或者BUFFSIZE,如果您决定稍后消除'n'),而不必查看使用它的位置。

相关内容

  • 没有找到相关文章

最新更新