c - 读取文件并存储在数组中

标签 c arrays struct

我有一个迷宫输入文件 maze.txt,如下所示:

    #.#######
    #.......#
    ####.####
    #....#..#
    #.####.##

其中“#”代表墙壁,“.”代表墙壁。代表可通过的细胞。我希望能够使用输入重定向读取此文件:

    mazeprogram.exe < maze.txt

我希望能够打印出这个迷宫中有多少行和列,如下所示:

    ##..##############
    ##..............##
    ########..########
    ##........##....##
    ##..########..####

我还想坚持使用 scanf(),因为我正在努力提高 C 编程的基础知识。

到目前为止,我在将行和列分配给二维数组时遇到了麻烦。这是我到目前为止所拥有的:

    #include <stdio.h>
    #include <stdlib.h>

    #define MAX_HEIGHT 100
    #define MAX_WIDTH 100
    #define wall "#"
    #define path_cell "."

    typedef struct {
        char type;
        int visited;
        int final_path;
    } mazecells_t;

    typedef struct {
        int height;
        int width;

        mazecells_t M[MAX_HEIGHT][MAX_WIDTH];

   } m_type;

   void read_maze(m_type *maze);

   int
   main(int argc, char *argv[]) {
       m_type MAZE;

       read_maze(&MAZE);

       return 0;
   }

   void 
   read_maze(m_type *maze) {
       int row=0, col=0;

       scanf("%d %d", &maze->height, &maze->width);

       for (row=0; row < maze->height; row++) {

           for(col=0; col < maze->width; col++) {
               maze -> M[row][col]; 
           }
       }
    }

我知道到目前为止我的代码是不正确的,我只是很难将迷宫输入中的行和列分配给二维数组。我希望能够做到这一点,以便我可以打印列和行。如果我没有朝着正确的方向前进,任何帮助我走上正确轨道的帮助将不胜感激。

谢谢大家:)

最佳答案

试试这个:

void
read_maze(m_type *maze) {
    int row=0, col=0;
    char ch;

    while(EOF != scanf("%c", &ch)){
        if(ch == wall || ch == path_cell){//#define wall '#' #define path_cell '.'
            maze->M[row][col].type = ch;
            maze->M[row][col].visited = 0;
            maze->M[row][col].final_path = 0;
            ++col;
        } else if(ch == '\n'){
            maze->width = col;//uncheck same size and max size limit
            col = 0;
            ++row;
        }
    }
    if(col != 0)
        ++row;//uncheck max size limit

    maze->height = row;

    printf("maze has %d rows and %d columns\n", maze->height, maze->width);
    for (row = 0; row < maze->height; row++) {
        for(col = 0; col < maze->width; col++) {
            putchar(maze->M[row][col].type); 
        }
        putchar('\n');
    }
}

关于c - 读取文件并存储在数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37100862/

相关文章:

c - C 中带有字符串的双指针/使用 malloc 指向数组的指针

c - 除了 POSIX 计时器,Linux 中还有哪些其他计时器 API?

javascript - 如何将带分隔符的连接数组拆分成 block

android - 使用字节数组读入文件,然后显示在ImageView (Android)

C++ 匿名结构异常定义

c - 系统调用表中的common abi有什么用

c - 在c中读取csv文件的末尾

JavaScript 按索引对数组进行垂直排序

c# - 长生命周期对象的结构与类

对象和结构成员访问和地址偏移计算