c语言编译器没有报错,但没有输出.....

#include<stdio.h>

int maze[8][8]= {{0,0,0,0,0,0,0,0},{0,1,1,1,1,0,1,0},{0,0,0,0,1,0,1,0},{0,1,0,0,0,0,1,0},{0,1,0,1,1,0,1,0},{0,1,0,0,0,0,1,1},{0,1,0,0,1,0,0,0},{0,1,1,1,1,1,1,0}},fx[4]= {1,-1,0,0},fy[4]= {0,0,-1,1};

int i,j,k,total;

void search(int i,int j);
void Out();
int check(int i,int j,int k);

int main()
{   int total=0;
    maze[1][1]=3;
    search(1,1);
    return 0;
}
void search(int i,int j)
{   int k,newi,newj;
    for(k=1; k<=4; k++)
        if(check(i,j,k)==1)
        {   newi=i+fx[k];
            newj=j+fy[k];
            maze[newi][newj]=3;
            if(newi==8&&newj==8)
                Out();

            else
                search(newi,newj);
        }
    maze[i][j]=2;
}
void Out()
{   int i,j;
    for(i=1; i<=8; i++)
    {   printf("\n");
        for(j=1; j<=8; j++)
            if(maze[i][j]==3)
            {   printf("V");
                total++;
            }
            else
                printf("*");
    }
    printf("Total is %d\n",total);
}
int check(int i,int j,int k)
{   int flag=1;
    i=i+fx[k];
    j=j+fy[k];
    if(i<1||i>8||j<1||j>8)
        flag=0;
    else if(maze[i][j]!=0)
        flag=0;
    return flag;
}

 for(k=1; k<=4; k++)
        if(check(i,j,k)==1)
        {   newi=i+fx[k];

==这肯定不行啊,fx就有四个数据,如果k=4的话,fx[k]就越界了,改成for(k=0;k<4;k++)。

 for(j=1; j<=8; j++)
            if(maze[i][j]==3)也存在同类问题

你要记住一个事:数组下标是从0开始的。如果数组长度是8,下标就是0到7,下标为8就越界了。

你的代码全是这个错误

这个很简单,完全可以自己查找原因,你的输出在Out()函数里面,没有输出说明没有走到那里,所以一步步反着推理就可以了!望采纳!

你那个for 有问题,你数组只有4组 。你fx[4]不久越界了嘛。 直接就崩了

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632