我试图创建一个可以打印四种不同网格尺寸(5x5,7x7,9x9,15x15)的魔方。我遇到的错误是函数中的数组magsquare告诉我它需要一个常量整数。 (我不能使用指针)这是一个类赋值。
#include <iostream>
#include <iomanip>
using namespace std;
void magicSquare(int n){
int magsquare[n][n] = { 0 }; /*THIS is the error with [n][n]*/
int gridsize = n * n;
int row = 0;
int col = n / 2;
for (int i = 1; i <= gridsize; ++i)
{
magsquare[row][col] = i;
row--;
col++;
if (i%n == 0)
{
row += 2;
--col;
}
else
{
if (col == n)
col -= n;
else if (row < 0)
row += n;
}
}
for (int i = 0; i < n; i++){
for (int j = 0; j < n; j++){
cout << setw(3) << right << magsquare[i][j];
}
cout << endl;
}
}
int main(){
int n = 5;
magicSquare(n);
return 0;
}
缩进可能看起来不正确,但是没错。遗憾。
答案 0 :(得分:2)
失败是因为标准C ++无法在堆栈上分配动态大小的数组,正如您尝试的那样。
int magsquare[n][n];
就magicSquare
而言n
仅在运行时已知,并且要在堆栈上分配数组,它的大小必须在编译时知道。
使用15 x 15阵列。
int magsquare[15][15];
只要你知道这是你所需要的最大的,你应该没问题。
替代品(您已经说过,您可以使用)
new
声明所需尺寸的二维数组。 (记得删除[]但是)std::vector
添加一个超过15或低于1的n值的检查也是一个好主意,否则,如果将1-15之外的任何值传递给函数,则您将面临未定义的行为。