【问题标题】:Reading from file into 2D array从文件读入二维数组
【发布时间】:2015-09-03 01:30:05
【问题描述】:

我试图将 .txt 文件中的 20x20 迷宫读入二维数组。 因为 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[22][20]; --> char maze[20][22];

标签: c arrays multidimensional-array


【解决方案1】:

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

char maze[20][BUFLEN];

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

【讨论】:

    【解决方案2】:

    首先,如果您有一个包含 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 \0 chars. */
    ...
    char maze[MAZESIZE][BUFSIZE];
    

    然后,您可以更改MAZESIZE 常量(或BUFFSIZE,以防您稍后决定删除'\n'),而无需查看您使用它的位置。

    【讨论】:

      猜你喜欢
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-06
      • 2014-09-13
      相关资源
      最近更新 更多