Массив переменной длины c ++ & без оператора >> ошибка? - PullRequest
0 голосов
/ 05 октября 2019

проходит курс c ++, и его попросили создать простую программу для усреднения значений в пользовательском массиве

я понял, что пройти лишнюю милю и научиться связываться с несколькими дополнительными типами.

Я искал в Интернете исправление для не переменных массивов в c, и я знаю, что именно здесь дерьмо попадает в вентилятор

//manually allocate the space to the array
int** MyArray = new int* [Length_Of_Array];  // i changed it to float to suit my program

Из-за моей ошибки я получаю ОШИБКА ИЗОБРАЖЕНИЯ

Есть ли лучшая альтернатива этому (придерживаться массивов, а не векторов)?

МОЙ ПОЛНЫЙ КОД

#include <iostream>

using namespace std;

//function declare
float Avg(float Array, int Length);

//Variable declare
int Length_Of_Array;

int main()
{
    //Declarations 
    float Result{};

    //User defines size of the array
    cout << "Please enter the length of your array (Min 5) ";
    cin  >> Length_Of_Array;

    //User Enters x elements into array
    cout << "Please enter" << Length_Of_Array << " Digits into the array " << endl;

    //manually allocate the space to the array
    float** MyArray = new float* [Length_Of_Array];

    //Function use
    Result = Avg(MyArray, Length_Of_Array);

    //Result
    cout << "THE AVERAGE OF YOUR ARRAY IS " << Result << endl;

}


float Avg(float** Array, int length) {

    int sum{};

    //Stores, enters and calculates user enters elements into array
    for (int i = 0; i < length; i++) {
        cin >> Array[i];
        sum += Array[i];
    }

    return (sum /length);

}

Ответы [ 2 ]

1 голос
/ 05 октября 2019

Давайте посмотрим на эту функцию:

float Avg(float** Array, int length) {

    int sum{};

    //Stores, enters and calculates user enters elements into array
    for (int i = 0; i < length; i++) {
        cin >> Array[i];
        sum += Array[i];
    }

    return (sum /length);

}

Тип Array равен float**, поэтому тип Array[i] равен float *. Но вы не можете прочитать float * из std::cin и вам не нужен float** для 1D-массива. (** обычно используется для матриц) Поскольку вам необходимо использовать массивы, все, что вам нужно сделать, это изменить float** на float*.

Таким образом, вы получите float Avg(float* Array, int length) и float* MyArray = new float[Length_Of_Array];

Некоторые другие советы:

  1. Не забудьте также обновить предварительное объявление Avg;)

  2. Не забудьте освободить выделенную память, если она вам больше не нужна, с помощью delete[] MyArray;

  3. Вы должны инициализировать переменную с фактическим значением, таким как int sum = 0; insted из int sum{};. Это делает ваш код более читабельным и понятным.

0 голосов
/ 05 октября 2019

Сигнатура функции в определении и объявлении функции не совпадает.

float** Array означает массив массива или указатель на массив. Кроме того, у вас есть проблема с утечкой памяти.

Вы можете просто использовать вектор вместо:

float Avg(std::vector<float>& Array, int length) {

    int sum{};

    //Stores, enters and calculates user enters elements into array
    for (int i = 0; i < length; i++) {
        cin >> Array[i];
        sum += Array[i];
    }

    return (sum /length);
}

и:

std::vector<float> MyArray(Length_Of_Array);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...