создание arr [n] [n] с новым выражением в C ++ - PullRequest
0 голосов
/ 15 октября 2018

Я сейчас работаю над этим кодом.Но есть некоторые проблемы.Прежде всего, если я запускаю этот код, он говорит 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;
        }
    }
}
~                                                                           

Кто-нибудь может мне помочь с этими ошибками?Заранее спасибо!

1 Ответ

0 голосов
/ 15 октября 2018

Учтите, что условие for просто работает, потому что два выражения, разделенных запятыми, являются истинными одновременно.

for (int i = 0, j = 0; i < n, j < n; i++, j++)

Это конечное условие эквивалентно выполнению только последнего теста, так как его результат будетбыть результатом выражения, разделенного запятыми.

Возможно, вы должны были написать это:

for (int i = 0, j = 0; i < n && j < n; i++, j++)
...