0

私の場合、必要なコードは次のようになります。

anRow0[] = {0,0,0,0,0,0,0}
anRow1[] = {0,0,0,0,0,0,0}
anRow2[] = {0,0,0,0,0,0,0}
int place(int nVar1, int nVar2) //Where nVar1 is the row and nVar2 = current turn
{
    int nVert = 0;
    while (anRow\i want to add nVar1 here\[nVert+1] && nVert < 6)
    {
        nVert += 1;
    }
    anRow[nVert] = nVar2;
    return true;
}

if (nVar1 == 0) //checkanRow1[] などにいくつかの " を作成できますが、それは非効率的です。
このような数値を追加する方法はありますか? また、残りのコードは無視してください。たとえば、while を for に置き換えることができることはわかっていますが、それは論外です。

どんな助けにも感謝します

4

5 に答える 5

2

このような2次元配列が必要なようです

int an[3][6] = {{0,0,0,0,0,0,0}, {0,0,0,0,0,0,0}, {0,0,0,0,0,0,0}};

int place(int nVar1, int nVar2)
{
    int nVert = 0;
    while (nVert < 6 && an[nVar1][nVert+1])
    {
        nVert += 1;
    }
    an[nVar1][nVert] = nVar2;
    return true;
}

そのコードは間違いなくバグがありますが(nVert < 5. それでもバグを修正することは別の問題です。

于 2013-09-20T06:59:39.693 に答える
1

C はコンパイル済み言語であり、変数名はメモリ アドレスに変換されるため、これは不可能です。実行時には、コードはソース コード内の変数の名前さえ知りません。

ランタイム データによって値を選択する場合は、常に配列を使用する必要があります。ここには複数のオプションがあります。C++ に最適なのは、いくつかの STL コンテナー (std::array、std::vector、std::list など) を使用することですが、C スタイルの配列を使用することもできます。

于 2013-09-20T07:01:49.130 に答える
1

次のように、配列を別の配列に入れることができます。

std::vector<int*> allRows = {
    anRow0,
    anRow1,
    anRow2
};

次に、変数を使用してallRowsベクトルにインデックスを付けます。

allRows[i][nVert] = nVar2;

またはより良いのは、 of を使用することstd::arrayですstd::array:

std::array<std::array<int, 7>, 3> allRows = {{
    {{ 0, 0, 0, 0, 0, 0, 0 }},
    {{ 0, 0, 0, 0, 0, 0, 0 }},
    {{ 0, 0, 0, 0, 0, 0, 0 }}
}};
于 2013-09-20T06:59:03.593 に答える
1

3 つの 1 次元配列の代わりに 2 次元配列を使用できます。ここでそれらについて何かを読むことができます: http://www.cplusplus.com/doc/tutorial/arrays/

可能な変更は次のとおりです。

int an[3][7] = {0};
int place(int nVar1, int nVar2) //Where nVar1 is the row and nVar2 = current turn
{
    int nVert = 0;
    while (anRow[nVar2][nVert+1] && nVert < 6)
    {
        nVert += 1;
    }
    anRow[nVert] = nVar2;
    return true;
}

ところで、戻り値がintなのになぜ「true」を返すのですか?許可されていますが、実行しないことをお勧めします。代わりに 1 を返すか、戻り値をブール値に変更してください。

于 2013-09-20T06:59:19.017 に答える
0

いいえ、変数、関数、または実際に何かの名前を構文的に操作することはできません-このC ++が本当に必要な場合、言語は間違っています。プリプロセッサ マクロを使用すると、非常に限定された機能セットが利用できる場合がありますが、それは実際には必要ありません。

代わりにコンテナを使用して変数を保存します。

std::vector<std::array<int, 7>> rows;
于 2013-09-20T07:00:31.073 に答える