我有一个迷宫输入文件maze.txt,如下所示:
#.#######
#.......#
####.####
#....#..#
#.####.##
“#”代表墙壁,“。”代表可通过的细胞。我希望能够使用输入重定向读取此文件:
mazeprogram.exe < maze.txt
我希望能够打印出这个迷宫中有多少行和列,如下所示:
##..##############
##..............##
########..########
##........##....##
##..########..####
我也想坚持使用scanf(),因为我试图在c编程的基础上变得更好。
到目前为止,我无法将行和列分配给2d数组。这就是我到目前为止所做的:
#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];
}
}
}
我知道到目前为止我的代码不对,我只是难以将迷宫输入中的行和列分配给2d数组。我希望能够这样做,所以我可以打印列和行。如果我没有朝着正确的方向前进,那么任何让我走上正确轨道的帮助都将不胜感激。
谢谢你们:)
答案 0 :(得分:1)
试试这个:
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');
}
}