我有两个函数,一个是将文件的内容保存在一个名为“迷宫”的二维数组中,这个数组位于一个结构体中,另一方面,第二个函数是将这个二维数组的内容打印到控制台中。
我的问题是第二个函数没有打印结构体中的二维数组的内容,我相信是因为我没有正确传递数组的内容,但我不确定。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* X and Y will be used to define the size of the maze*/
#define X 20
#define Y 40
typedef struct
{
char maze[X][Y]; /* X and Y have been defined as X = 20 and Y = 40*/
char robot;
int x,y;
}Cords;
这是我的函数原型:
void save_maze(Cords);
void print_maze(Cords);
将文件内容保存到二维数组中的函数:
void save_maze(Cords border)
{
int i,j,k,x,y;
char wall;
FILE *FileMaze;
FileMaze = fopen("maze.txt","r");
if (FileMaze == NULL)
{
printf("\n The file is missing");
}
else
{
printf("File was open! \n");
while(fscanf(FileMaze,"%d %d %c",&x,&y,&wall)!= EOF)
{
border.maze[x][y] = wall;
}
}
fclose(FileMaze);
printf("The Maze has been saved! \n");
}
应打印二维数组的函数:
void print_maze(Cords border)
{
int i,j,k,x,y;
int row,col;
row=X;
col=Y;
for (i = 0; i <row ; i++)
{
for (j = 0; j < col; j++)
{
if(border.maze[i][j] != 'x' && border.maze[i][j] != 'o' && border.maze[i][j] != 'S' && border.maze[i][j] != 'E')
{
border.maze[i][j] = ' ';
}
else
{
printf("%2c",border.maze[i][j]);
}
}
printf("\n\r");
}
}
“print_迷宫”函数不打印结构内部的2d数组的内容。
1条答案
按热度按时间kkbh8khc1#
看起来您正尝试按值而不是按引用将结构体Cords传递给print_迷宫函数。这意味着print_maze函数中的border参数是原始结构体的副本,对函数内部border参数所做的任何更改都不会影响原始结构体。
要解决这个问题,可以使用指针通过引用传递struct。下面是修改函数签名和函数调用的方法:
然后,您需要使用
->
而不是.
来访问函数内部结构体的字段。