Я сейчас работаю над этим кодом.Но есть некоторые проблемы.Прежде всего, если я запускаю этот код, он говорит array size in new-expression must be constant
.Если я сделаю массив arr[n]
, это сообщение об ошибке не появится.Также этот код выдает сообщение об ошибке, когда попадает в строку cout << arr[i][j] << endl;
, говоря, что invalid types 'int[int]' for array subscript.
Я не понимаю, почему появляется это сообщение об ошибке, потому что я создал массив arr[n][n]
, а не arr[n]
.Что я хочу сделать с этим кодом, так это показать магический квадрат для n * n, если я введу n в строке аргумента.
Это мой main.cc
#include <iostream>
#include <cstdlib>
#include <cstring>
#include "magic_square.h"
using namespace std;
int main(int argc, const char** argv) {
int n = atoi(argv[1]);
int *arr = new int[n][n];
if (n % 2 == 0 || n < 3)
return 0;
else
magicSquare(n, arr);
for (int i = 0, j = 0; i < n, j < n; i++, j++)
cout << arr[i][j] << endl;
delete[] arr;
return 0;
}
Это мой magic_square.cc.Я не добавил magic_square.h
, так как это только объявление функции void magicSquare(int n, int* arr)
.
#include <iostream>
#include "magic_square.h"
void magicSquare(int n, int* arr) {
for (int i = 0, j = n/2, num = 1; num <= n*n; num++) {
arr[i][j] = num;
if (num % n == 0) {
i++;
}
else {
i--, j++;
if (i < 0)
i = n - 1;
if (j > (n - 1))
j = 0;
}
}
}
~
Кто-нибудь может мне помочь с этими ошибками?Заранее спасибо!