你输出“一串乱码”的直接原因就在这里:
因为 a 是 char 数组。比如 cnt = 3,你存进去的是 ASCII 编码为 3 的控制字符,而不是字符 '3'。
应该改成:
但是你的代码还有两个问题,即使把乱码修掉,答案也会错。
你的代码需要改 3 处
① 数字要转成字符
原来:
改成:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
② a 没初始化,而且你还没把所有雷放进去,就开始检查周围
你现在是一边遍历:
比如现在处理 (1,1),此时 (2,1) 还没处理,a[2][1] 里面是垃圾值。
所以必须先:
再:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
③ 你判断雷的位置写错了
你写:
这里的 i 是地图行号,不是第几个雷。
比如有雷:
你的写法只可能找到 (1,1),无法正确找到 (1,3)。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
按照你原来的代码,尽量不重构,可以这样改:
你现在最需要理解的一点就是:
所以你原程序出现乱码,最直接就是 a[i][j] = cnt; 这一行导致的。