我的代码出了什么问题?多维数组?C编程



在这个程序中,有一个使用二维数组构建的6 x 6映射。该程序的目的是引导物体穿过障碍物。每个坐标都包含一个值,如果要作为对象的新坐标,则每个值表示对象与其目标之间的距离。对象的初始坐标为(0.5),其目标坐标为(5,0)。值50表示障碍。对象应选择包含最小值的下一个坐标。目标坐标的值为0。这是地图:

   0 | 1 | 2 | 3 | 4 | 5
0| 7 | 50| 3 | 2 | 1 | 0
1| 6 | 5 | 4 | 3 | 2 | 1
2| 7 | 6 | 5 | 50| 50| 50
3| 8 | 7 | 6 | 7 | 8 | 9
4| 50| 50| 50| 50| 50| 10
5| 0 | 15| 14| 13| 12| 11 

该程序假定输出一系列从(0.5)到(5,0)的坐标。

#include<stdio.h>
#include<stdlib.h>
//These are the functions to move the object through the map.
void moveForward(int new_c[1][2]);
void moveBackward(int new_c[1][2]);
void moveLeft(int new_c[1][2]);
void moveRight(int new_c[1][2]);
int main()
{   
    int map[6][6]={{7,50,3,2,1,0},
                   {6,5,4,3,2,1},
                   {7,6,5,50,50,50},
                   {8,7,6,7,8,9},
                   {50,50,50,50,50,10},
                   {0,15,14,13,12,11}};
    int coordinate[1][2]={{0,5}};
    int x = 0;
    int y = 5;
    printf("(%d,%d),",x,y);
    while(x!=5&&y!=0)
    {           
        if(map[y-1][x] < map[y+1][x] && //Forward < Backward
           map[y-1][x] < map[y][x-1] && //Forward < Left
           map[y-1][x] < map[y][x+1] && //Forward < Right
           y - 1 >= 0 && 
           y + 1 <= 5 && 
           x - 1 >= 0 && 
           x + 1 <= 5)
           {
               moveForward(coordinate);
               y = y - 1;
            }
            else
            {     
                if(map[y+1][x] < map[y-1][x] && //Backward < Forward
                   map[y+1][x] < map[y][x-1] && //Backward < Left
                   map[y+1][x] < map[y][x+1] && //Backward < Right
                   y - 1 >= 0 &&
                   y + 1 <= 5 &&
                   x - 1 >= 0 &&
                   x + 1 <= 5)
                   {
                       moveBackward(coordinate);
                       y = y + 1;
                   }
                   else
                   {      
                       if(map[y][x-1] < map[y][x+1] && //Left < Right
                          map[y][x-1] < map[y+1][x] && //Left < Backward
                          map[y][x-1] < map[y-1][x] && //Left < Forward
                          y - 1 >= 0 &&
                          y + 1 <= 5 &&
                          x - 1 >= 0 &&
                          x + 1 <= 5)
                          {
                              moveLeft(coordinate);
                              x = x + 1;
                          }
                          else
                          {     
                              if(map[y][x+1] < map[y][x-1] && //Right < Left
                                 map[y][x+1] < map[y+1][x] && //Right < B
                                 map[y][x+1] < map[y-1][x] && //Right < F
                                 y - 1 >= 0 &&
                                 y + 1 <= 5 &&
                                 x - 1 >= 0 &&
                                 x + 1 <= 5)
                                 {
                                     moveRight(coordinate);
                                     x = x - 1;
                                 }
                           }
                   }
            }
    }
return 0;
}
void moveForward(int new_c[1][2])
{   //This modifies the y coordinate.
    new_c[0][1] = new_c[0][1] - 1;
    printf("(%d,%d),", new_c[0][0], new_c[0][1]);
}
void moveBackward(int new_c[1][2])
{   //This modifies the y coordinate.
    new_c[0][1] = new_c[0][1] + 1;
    printf("(%d,%d),", new_c[0][0], new_c[0][1]);
}
void moveLeft(int new_c[1][2])
{    //This modifies the x coordinate.
    new_c[0][0] = new_c[0][0] - 1;
    printf("(%d,%d),", new_c[0][0], new_c[0][1]);
}
void moveRight(int new_c[1][2])
{   //This modifies the x coordinate.
    new_c[0][0] = new_c[0][0] + 1;
    printf("(%d,%d),", new_c[0][0], new_c[0][1]);
}

Output:
(0,5),

然后光标像往常一样闪烁。底部没有说明返回值或执行时间的语句。

您的代码访问映射之外的部分。例如,如果x为0,则访问map[y][x-1]。这是未定义的行为,可能会导致您正在经历的无限循环。

在您的条件下,您有&& x - 1 >= 0。因此,如果x == 0,所有条件都将始终为假,因此coordinate永远不会改变。由于x0开始,所以不会发生任何事情。

另一个编辑:当我在做的时候,while(x!=5&&y!=0)也错了。一旦到达正确的列行,循环就会停止。您需要while(x != 5 || y != 0)

最新更新