从文件中读取内容到二维数组中

3
我试图从.txt文件中读取20x20的迷宫并存储在二维数组中。 因为fgets函数会读取NUL字符和换行符,我在每行预留了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[22][20]; --> char maze[20][22]; - BLUEPIXY
2个回答

3

您声明了错误的数据类型。正确的声明应该是:

char maze[20][BUFLEN];

这将为您提供20个“行”BUFLEN字符。


0
首先,如果您有一个大小为22的20个缓冲区的数组,则必须声明一个数组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 \0 chars. */
...
char maze[MAZESIZE][BUFSIZE];

然后,您可以更改MAZESIZE常量(或BUFFSIZE,如果您决定稍后消除'\n'),而无需查找其使用位置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接