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
相关产品推荐
相关产品推荐

