就我而言,我想要的代码看起来像这样:
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,但除了这一点之外。
感谢任何帮助
答案 0 :(得分: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
会更好)。仍在修复错误是另一个问题。
答案 1 :(得分:1)
您可以将数组放在另一个数组中,如下所示:
std::vector<int*> allRows = {
anRow0,
anRow1,
anRow2
};
然后使用变量索引allRows
向量,如
allRows[i][nVert] = nVar2;
或者更好的是,使用std::array
的{{1}}:
std::array
答案 2 :(得分:1)
您可以使用二维数组而不是3个1维数组。 您可以在此处阅读有关它们的内容: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,或将返回值更改为布尔值。
答案 3 :(得分:1)
这是不可能的,因为C是一种编译语言,变量名称被转换为内存地址。在运行时,代码甚至不知道源代码中变量的名称。
如果要按运行时数据选择值,则必须始终使用数组。这里有多个选项,最好的C ++是使用一些STL容器(std :: array,std :: vector,std :: list,...),但你也可以使用C风格的数组。
答案 4 :(得分:0)
不,你不能操纵变量,函数的名称,或者语法上真正的anthing - 如果你真的需要这个C ++是错误的语言。使用预处理器宏可能会有一些非常有限的功能,但真的不是你想要的。
而是使用容器来存储变量:
std::vector<std::array<int, 7>> rows;