You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中0x10符号无法在二维数组中显示的问题求助

问题原因与解决方案

核心问题1:0x10是不可见的ASCII控制字符

ASCII码中0x00-0x1F属于控制字符范畴,0x10对应DLE(数据链路转义),这类字符仅用于传输控制逻辑,终端不会输出任何可见符号——这和指针使用无关,是字符本身的属性导致无法显示。

核心问题2:print_maze函数误将机器人字符覆盖为空格

在print_maze的遍历逻辑中,你把所有不属于'x'、'o'、'S'、'E'的字符都强制替换成了空格,而你设置的机器人字符(0x10)不在这个白名单里,直接被改成空格,自然无法显示。

额外问题:文件关闭逻辑存在崩溃风险

如果fopen失败返回NULL,后续执行fclose(FileMaze)会触发空指针错误,需要调整fclose的位置,确保仅在文件成功打开时执行关闭操作。


修复后的代码调整

1. 替换机器人为可见字符

把机器人字符改成可见符号,比如用'>'代表向右(符合你的方向需求):

// 在save_maze函数中修改这行
border->robot = '>'; // 替换0x10为可见的向右箭头符号

2. 修改print_maze的白名单逻辑

在判断条件中加入机器人字符,避免被覆盖为空格:

void print_maze(Cords* border)
{
    int i,j;
    int 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] != border->robot)
            {
                border->maze[i][j] = ' ';
            } 
            printf("%2c",border->maze[i][j]);
        }
        printf("\n"); // 去掉多余的\r,多数终端用\n即可完成换行
    }
}

3. 修复文件关闭逻辑

// 在save_maze函数中,将fclose移至else块内部
else
{
    printf("File was open! \n");
    while(fscanf(FileMaze,"%d %d %c",&x,&y,&wall) == 3)
    {
         border->maze[x][y] = wall; 
    }
    fclose(FileMaze); // 仅在文件打开成功时执行关闭
}
printf("The Maze has been saved! \n");

内容的提问来源于stack exchange,提问作者Benjamin Alonso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 14:29:53