我有这个问题了一段时间了,我不知道下一步该怎么做。基本上我试图添加十六进制值0x10的ASCII符号到我的二维数组。这个ASCII符号将作为4个方向之一(在这个例子中是右边)一个“机器人”。2D数组的内容是一个迷宫,它是从一个txt文件的内容中收集的。我已经用指针读取了文件的内容和数组的打印。然而,当我打印2D数组时,迷宫完美地显示出来,但ASCII符号0x10根本不显示。
我相信问题可能来自于使用指针,但我可能是错的。
这是我的
#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
/*Structures*/
typedef struct
{
char maze[X][Y];
char robot;
int x,y;
}Cords;
/*---Function Prototype---*/
void save_maze(Cords*);
void print_maze(Cords*);
/*Function to Save the maze file into the array*/
void save_maze(Cords* border)
{
int i,j,k,x,y;
char wall;
int row,col;
row=X;
col=Y;
border->robot = 0x10;
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) == 3)
{
border->maze[x][y] = wall;
}
}
/*Here I am trying to set the ASCII 0x10*/
border->maze[1][2] = border->robot;
fclose(FileMaze);
printf("The Maze has been saved! \n");
}
/* This fuction takes the value of maze by reference using a pointer */
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')
{
/*blank spaces is where the "robot" can move around*/
border->maze[i][j] = ' ';
}
printf("%2c",border->maze[i][j]);
}
printf("\n\r");
}
为澄清起见,文件内容如下:
- “X”是迷宫的墙壁。
- “o”是迷宫里的硬币。
- “S”是迷宫的起点。
- E是迷宫的出口
剩下的代码只是我的main函数,我在这里调用了这两个函数。
2条答案
按热度按时间ttygqcqt1#
Ascii字符0x10在打印时不可见,尝试
printf("%3d",border->maze[i][j]);
。这将把每个单元格打印为数字而不是字符。也可以将字符更改为可见字符:https://ss64.com/ascii.html
y4ekin9u2#
print_maze()
正在修改迷宫的每个元素,在打印该元素之前,将'x'
、'o'
、'S'
和'E'
以外的任何元素替换为空格(' '
)。如果只想打印迷宫而不想在打印时修改它,则将一个局部变量赋给迷宫的元素的值,并修改该变量而不是修改迷宫的元素:
如果要打印robot字符,请不要将其替换为空格:
ASCII字符代码0x10可能无法在您的终端上打印。您可以使用“正常”可打印字符,例如机器人的
'>'
。可能使用ASCII字符'>'
,'<'
,'^'
和'v'
用于不同的方向。