0X10 Symbol In C not showing in array

2uluyalo  于 2023-03-29  发布在  其他
关注(0)|答案(2)|浏览(125)

我有这个问题了一段时间了,我不知道下一步该怎么做。基本上我试图添加十六进制值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函数,我在这里调用了这两个函数。

ttygqcqt

ttygqcqt1#

Ascii字符0x10在打印时不可见,尝试printf("%3d",border->maze[i][j]);。这将把每个单元格打印为数字而不是字符。
也可以将字符更改为可见字符:https://ss64.com/ascii.html

y4ekin9u

y4ekin9u2#

print_maze()正在修改迷宫的每个元素,在打印该元素之前,将'x''o''S''E'以外的任何元素替换为空格(' ')。
如果只想打印迷宫而不想在打印时修改它,则将一个局部变量赋给迷宫的元素的值,并修改该变量而不是修改迷宫的元素:

char elem = border->maze[i][j];

            if(elem != 'x' && elem != 'o' && elem != 'S' && elem != 'E')
            {
                /*blank spaces is where the "robot" can move around*/

                elem = ' ';
            } 
            
            printf("%2c",elem);

如果要打印robot字符,请不要将其替换为空格:

if(elem != 'x' && elem != 'o' && elem != 'S' && elem != 'E' && elem != border->robot)

ASCII字符代码0x10可能无法在您的终端上打印。您可以使用“正常”可打印字符,例如机器人的'>'。可能使用ASCII字符'>''<''^''v'用于不同的方向。

相关问题