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;
}

我可以为 anRow1[] 等制作几个“ if (nVar1 == 0) //check,但这似乎效率低下。
有没有办法添加这样的数字?另外,请忽略其余代码,我知道你可以例如用 for 替换 while,但是这不是重点。

感谢任何帮助

4

5 回答 5

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;

或者更好的是,使用std::arrayof 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 个一维数组。您可以在此处阅读有关它们的信息: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 回答