-1

我正在尝试创建一个从平面文件加载棋盘的扫雷游戏(不,它不是随机的)。根据分配指令,我将一个二维数组传递给一个加载函数,该函数将解析作为命令行参数传递的文件。

无论如何,我的问题是传递二维数组。做这件事的正确方法是什么?以下是我到目前为止的代码:

#include <iostream>

using namespace std;

struct Tile
{
    bool mine, visible;
    int danger;
};

bool loadBoard( Tile **board, string filename );

const int gridSize = 6;

int main( int argc, char* argv[] )
{
    Tile board[ gridSize ][ gridSize ];

    loadBoard( board, argv[ 1 ] );

    system("PAUSE");
    return EXIT_SUCCESS;
}

bool loadBoard( Tile **board, string filename ) {

}
4

3 回答 3

3

既然您使用的是 C++,为什么不使用

std::vector<std::vector<Tile>>

优先于 C 风格的数组?

由于您似乎需要使用 C 风格的数组,您可以使用 arpanchaudhury 建议的方法,或者您可以通过Tile*并执行类似的操作

static void loadBoard(Tile *board, int rows, int cols, string filename) {
    for (int row = 0; row < rows; row++) {
        for (int col = 0; col < cols; col++) {
            Tile* tile = &board[(row*gridSize)+col];
            // populate Tile
        }
    }
}
于 2013-01-18T15:26:27.377 回答
2

如果您想传递二维数组,请指定数组中的列数。

bool loadBoard( Tile board[][size], string filename ) {}

尽管最好使用向量而不是简单的数组,因为您不需要指定预定义的大小

于 2013-01-18T15:32:32.737 回答
1

只要你使用 C++...

#include <iostream>
using namespace std;

struct Tile
{
    bool mine, visible;
    int danger;
};

// load a square board of declared-size.
template<size_t N>
void loadboard( Tile (&board)[N][N], const std::string& filename)
{
    // load board here.
    cout << "Loading from file: " << filename << endl;
    for (size_t i=0;i<N;++i)
    {
        cout << "board[" << i << "]: [ ";
        for (size_t j=0;j<N;++j)
        {
            // load element board[i][j] here
            cout << j << ' ';
        }
        cout << ']' << endl;
    }
    cout << endl;
}

int main()
{
    Tile board[6][6];
    loadboard(board, "yourfilename.bin");   // OK dims are the same

    Tile smaller[3][3];
    loadboard(smaller, "anotherfile.bin");  // OK. dims are the same

    // Tile oddboard[5][6];
    // loadboard(oddboard, "anotherfile.bin"); // Error: dims are not the same.

    return 0;
}

输出

Loading from file: yourfilename.bin
board[0]: [ 0 1 2 3 4 5 ]
board[1]: [ 0 1 2 3 4 5 ]
board[2]: [ 0 1 2 3 4 5 ]
board[3]: [ 0 1 2 3 4 5 ]
board[4]: [ 0 1 2 3 4 5 ]
board[5]: [ 0 1 2 3 4 5 ]

Loading from file: anotherfile.bin
board[0]: [ 0 1 2 ]
board[1]: [ 0 1 2 ]
board[2]: [ 0 1 2 ]

当然,也可能有“特定说明”不使用该语言的模板功能。再说一次,我敢打赌,这些说明也不包括让 SO 用户解决您的问题,所以我不会对那些很快就会严格遵循的说明进行评估。

于 2013-01-18T16:27:42.807 回答