需要将n个数字存储在动态数组中

need to store n numbers in dynamic array

本文关键字:动态 数组 存储 数字      更新时间:2023-10-16

在这里,我有一个程序来提示用户输入数组的大小,然后向用户询问整数并计算平均值。我缺少一些东西,数字没有存储在数组中。

int n;
int *sizeOfArr;
double total = 0;
double avg;
cout << "Please enter n, for size of array: ";
cin >> n;
sizeOfArr = new int[n]; //dynamically allocates n amount of memory 
for (int i = 1; n >= i; i++){ 
    cout << "Enter number " << i << ": ";
    cin >> sizeOfArr[n];
    if (sizeOfArr[n] < 0){
        do{
            cout << "Please enter postive number for number " << i << ": ";
            cin >> sizeOfArr[n];
        } while (sizeOfArr[n] <= 0);
    }
    total += sizeOfArr[n];      
}
avg = total / n; //average formula
cout << "nAverage of the numbers stored in dynamic array = " << avg << endl; //output 
return 0;
system("pause");

使用std :: vector而不是动态数组int*。您无需向用户询问size(),就可以通过std :: vector.push_back()动态添加变量。可以通过调用std :: vector.size()。

来获得大小

您的代码中有一些错误:您的循环启动int i = 1;那是错误的。数组的第一个索引为0。引用向量项目时相同的东西:您必须设置sizeofarr [i]不sizeofarr [n]。

现在计算平均值的要点:您的计算以int运行。如果您以这种方式计算,结果将是错误的。您应该使用double。

实际上应该是 sizeOfArr[i-1]而不是 sizeOfArr[n]

您的迭代索引i从1开始,但数组索引应从0

开始

您正在使用错误的变量索引sizeOfArr[]-您应该使用loop变量i作为索引。另外,由于您从1到N,而不是通常的0到N -1,因此您需要调整索引以补偿这一点。因此,要么更改所有出现:

sizeOfArr[n]

to:

sizeOfArr[i - 1]

或将for循环更改为更典型的形式:

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

然后使用:

    sizeOfArr[i]

使用sizeOfArr[i]代替sizeOfArr[n]