我在多个网站上查看了很多关于如何将二维数组传递给函数的主题。但由于某种原因,它们似乎都没有正常工作。
#include <stdio.h>
#include <iostream>
#include <string>
void display(char maze[NUM_COLS],int NUM_ROWS);
int findpath(int x, int y);
int main(void)
{
int NUM_ROWS;
int NUM_COLS;
std::cin >> NUM_ROWS >> NUM_COLS;
std::string w;
char maze[NUM_ROWS][NUM_COLS];
getline(std::cin, w);
for (int row = 0; row < NUM_ROWS; row++)
{
for(int col = 0; col < NUM_COLS; col++)
{
maze[row][col] = w[col + (row * NUM_COLS)];
}
}
if ( find_path(0, 0) == 1 )
{
printf("Success!\n");
}
else
{
printf("Failed\n");
}
display(maze[NUM_COLS],int NUM_ROWS);
return 0;
}
void display(char maze[NUM_COLS],int NUM_ROWS)
{
printf("MAZE:\n");
for ( int i = 0; i < num_rows; i++ )
printf("%.*s\n", NUM_COLS, maze[i]);
printf("\n");
return;
}
int findpath(int x, int y)
{
// If x,y is outside maze, return false.
if ( x < 0 || x > NUM_COLS - 1 || y < 0 || y > NUM_ROWS - 1 )
{
return 0;
}
// If x,y is the goal, return 1.
if ( maze[y][x] == 'G' )
{
return 1;
}
// If x,y is not open, return false.
if ( maze[y][x] != ' ' && maze[y][x] != 'S' )
{
return 0;
}
// Mark x,y part of solution path.
maze[y][x] = '+';
// If find_path North of x,y is 1, return 1.
if ( find_path(x, y - 1) == 1 )
{
return 1;
}
// If find_path East of x,y is 1, return 1.
if ( find_path(x + 1, y) == 1 )
{
return 1;
}
// If find_path South of x,y is 1, return 1.
if ( find_path(x, y + 1) == 1 )
{
return 1;
{
// If find_path West of x,y is 1, return 1.
if ( find_path(x - 1, y) == 1 )
{
return 1;
}
// Unmark x,y as part of solution path.
maze[y][x] = 'x';
return 0;
}
我只是找不到任何方法来传递我的二维数组以使一切正常。如果我只是在 main 之外强制一个 2D 数组,这些函数就可以工作。但是当获取信息并将它们传递给函数时,它会给我声明错误。
void display(char maze[NUM_COLS],int NUM_ROWS);
display(maze[NUM_COLS],int NUM_ROWS);
这是我的问题。当我编译时,我的错误是它没有接受我数组的任何部分。我只是不知道传入我的数组的正确方法。代码工作。如果我在全局范围内设置了一个二维数组,这样我就不必传递任何东西,并且函数可以抓取 NUM_COLS 和 NUM_ROWS 以及数组本身并将其弄乱,函数就会编译并运行。