int X[n]; выражение не определяется константой С++

#include <iostream>
#include <conio.h>
#include <locale>

using namespace std;

int main() {
    setlocale(LC_ALL, ""); // Встановлення локалі для вводу та виводу тексту

    int n, k;

    cout << "Введіть розмір масиву: ";
    cin >> n;

    if (n <= 0) {
        cout << "Розмір масиву має бути більшим за 0!" << endl;
        return 1;
    }

    cout << "Введіть значення k: ";
    cin >> k;

     int X[n];

    cout << "Введіть елементи масиву: ";
    for (int i = 0; i < n; i++) {
        cin >> X[i];
    }

    // Перевпорядкування масиву
    int i = 0, j = -1;

    // Переміщення від'ємних елементів на початок
    for (i = 0; i < n; i++) {
        if (X[i] < 0) {
            j++;
            swap(X[i], X[j]);
        }
    }

    // Перевірка передостаннього непарного елемента
    if (j % 2 == 0 || X[j - 1] <= k) {
        goto output; // Перехід до виводу результату
    }

    // Переміщення останнього додатнього елемента на передостанню непарну позицію
    swap(X[j], X[i]);
    i++;

    // Сортування додатніх елементів
    for (int i = 0; i < n; i++) {
        if (X[i] > 0) {
            for (int j = i + 1; j < n; j++) {
                if (X[i] > X[j]) {
                    swap(X[i], X[j]);
                }
            }
        }
    }

output: // Мітка для виходу з циклу
    cout << "\nВідсортований масив: ";
    for (int i = 0; i < n; i++) {
        cout << X[i] << " ";
    }`введите сюда код`

    _getch(); // Очікування натискання клавіші для завершення програми

    return 0;
}

Ответы (1 шт):

Автор решения: Harry

Стандарт С++ предполагает, что размер статического массива известен во время компиляции. В вашем случае вы хотите создать массив, размер которого определяете во время выполнения.

Используйте динамически выделяемый массив, наподобие

int * X = new int[n]; 

или пользуйтесь векторами.

→ Ссылка