一道练习,请帮我分析下我的写法哪里有问题

自学C。刚学到数组,前面只学了选择、循环语句一些最基础的。

遇到了一个编程题:

img

下面是我尝试的方法

#include<stdio.h>
#include<stdbool.h>
#include<time.h>
#include<stdlib.h>
int main()
{
    char maze[10][10] = { 0 };

    srand((unsigned)time(NULL));

    for (int i = 0; i < 10; i++) {
        for (int a = 0; a < 10; a++) {
            maze[i][a] = '.';
        }
    }//初始化表

    int step_type = 0;//用来记录走法
    int m = 0, n = 0; //记录轨迹
    maze[0][0] = 'A';//从左上角开始走
    bool check[4] = { false };//用来检查走法是否重复

    for (int i = 1; i < 26;) {

        do {
            step_type = rand() % 4;
        } while (check[step_type]);  //跳过无效的走法

        switch (step_type) {
        case 0:
            if ((m - 1) >= 0 && maze[m - 1][n] == '.')//向上走不超出表&&上方格子未走过 
            {
                m = m - 1;                 //向上走。
                maze[m][n] = 'A' + i;      //留下字母足迹。
                i++;
                bool check[4] = { 0 };     //清零走法检查
                break;
            }
            else {
                check[step_type] = true;   //标记此走法无效
                if ((check[0] + check[1] + check[2] + check[3]) == 4) {
                    i = 26;                //若上下左右都不可走,提前结束
                    break;
                }
                break;                     //否则再次尝试移动。
            }
        case 1:
            if ((m + 1) <=9  && maze[m + 1][n] == '.') {
                m += 1;
                maze[m][n] = 'A' + i;
                i++;
                bool check[4] = { 0 };
                break;
            }
            else {
                check[step_type] = true;
                if ((check[0] + check[1] + check[2] + check[3]) == 4) {
                    i = 26;
                    break;
                }
                break;
            }
        case 2:
            if ((n - 1) >= 0 && maze[m][n - 1] == '.') {
                n -= 1;
                maze[m][n] = 'A' + i;
                i++;
                bool check[4] = { 0 };
                break;
            }
            else {
                check[step_type] = true;
                if ((check[0] + check[1] + check[2] + check[3]) == 4) {
                    i = 26;
                    break;
                }
                break;
            }
        case 3:
            if ((n + 1) <= 9 && maze[m][n + 1] == '.') {
                n += 1;
                maze[m][n] = 'A' + i;
                i++;
                bool check[4] = { 0 };
                break;
            }
            else {
                check[step_type] = true;
                if ((check[0] + check[1] + check[2] + check[3]) == 4) {
                    i = 26;
                    break;
                }
                break;
            }
        }
    }

    for (int i = 0; i < 10; i++) {
        for (int a = 0; a < 10; a++) {
            printf("%c ", maze[i][a]);
        }
        printf("\n");
    }//打印轨迹表格

    return 0;
}

** 运行结果及报错内容**

img

很明显这个程序失败了

我想知道哪里出了问题,希望您能详细一些解答,感激不尽。

两个问题,第一个是你24到26行那个while循环,是多余的,因为本身0也应该是有效的方向,你加一个while导致出的值一定不为0,导致有一个方向消失了。
第二个是你的这一句bool check[4] = { 0 };C语言只支持定义的时候能这样赋值,后续想把整个数组赋值是不能这样的,得用memset。

判断走法有问题呀。