可变长度数组C ++&No operator >>错误?

时间:2019-10-05 07:38:38

标签: c++ arrays variables

经历了一个c ++课程,并被要求创建一个简单的程序来对用户数组中的值求平均值

我想到了id,要加倍努力并学会弄乱其他几种类型。

我在线搜索了c语言中非变量数组的修复程序,我知道这就是狗屎的源头

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

因为我的错误越来越严重 ERROR IMAGE

是否有更好的选择(坚持数组而不是向量)?

我的完整代码

#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 个答案:

答案 0 :(得分:1)

让我们看一下这个功能:

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**。 (**通常用于矩阵)由于需要使用数组,因此您要做的就是将float**更改为float*

因此您得到float Avg(float* Array, int length)float* MyArray = new float[Length_Of_Array];

其他一些提示:

  1. 也不要忘记更新Avg的前向声明;)

  2. 如果您不再需要使用delete[] MyArray;

  3. 释放已分配的内存,别忘了
  4. 您应该使用一个实际值初始化一个变量,例如由int sum = 0;插入的int sum{};。它使您的代码更易于阅读和理解。

答案 1 :(得分:0)

函数定义和声明中的函数签名不匹配。

float** Array表示数组数组或指向数组的指针。除此之外,您还有内存泄漏的问题。

您可以简单地使用vector代替:

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);