C++ 请求输入数据的数量并将输入数据存储在数组中

C++ 请求输入数据的数量并将输入数据存储在数组中,c++,C++,该代码当前接受一个数据条目的输入和一个由单个空格分隔的数字输入。我的目标是获取输入的数据并将其转换为数组,但无论何时尝试使用该格式 int array[ndata]; 由于变量ndata不是常量,生成包含错误。如何更改数组大小的输入以允许此操作 代码: #包括“pch.h” #包括 #包括 使用名称空间std; int main() { 常数int MAXDATA=100; 布尔ok=1; 双和=0,x,数据[MAXDATA]; 双最小值=1e32,最大值=1e32; int-nda=0; 整

该代码当前接受一个数据条目的输入和一个由单个空格分隔的数字输入。我的目标是获取输入的数据并将其转换为数组,但无论何时尝试使用该格式

int array[ndata];
由于变量ndata不是常量,生成包含错误。如何更改数组大小的输入以允许此操作

代码:

#包括“pch.h”
#包括
#包括
使用名称空间std;
int main()
{
常数int MAXDATA=100;
布尔ok=1;
双和=0,x,数据[MAXDATA];
双最小值=1e32,最大值=1e32;
int-nda=0;
整数计数=0;
while(ok)
{
洪水;
如果(ndata>0&&ndatax;
数据[计数]=x;
sum=sum+x;
计数++;

有两种方法可以解决这个问题

声明更接近首次使用的变量 第一种方法是将变量声明为更接近您打算使用它们的位置。这是一种有用的方法,因为当声明和使用彼此接近时,可以更容易地读取代码。它看起来像这样:

#include <iostream>
#include <string>


using namespace std;
int main(){
const int MAXDATA = 100;
bool ok = 1;
double sum = 0, x;
double min = 1e32, max = -1e32;
int ndata = 0;
int count = 0;

while (ok) {
    cout << "Enter number of data to input then press <Enter>: ";
    cin >> ndata;
    if (ndata > 0 && ndata < MAXDATA) ok = 0;
    cout << "Enter numbers separated by a single space, then press <Enter>: ";
    count = 0;
    double data[ndata];
    while (count < ndata) {
        cin >> x;
        data[count] = x;
        sum = sum + x;
        count++;
        cout << "sum is " << sum << endl;
    }
}

}
#include <iostream>
#include <string>


using namespace std;
int main(){
    const int MAXDATA = 100;
    bool ok = 1;
    double sum = 0, x;//, data[MAXDATA];
    double min = 1e32, max = -1e32;
    int ndata = 0;
    int count = 0;
    
    while (ok) {
        cout << "Enter number of data to input then press <Enter>: ";
        cin >> ndata;
        if (ndata > 0 && ndata < MAXDATA) ok = 0;
        cout << "Enter numbers separated by a single space, then press <Enter>: ";
        count = 0;
        double *data = new double [ ndata ];
        while (count < ndata) {
            cin >> x;
            data[count] = x;
            sum = sum + x;
            count++;
            cout << "sum is " << sum << endl;
        }
        delete []  data;
    }
    
}

让我们从构建失败的原因开始:GCC支持可变长度数组,但不是所有编译器都支持

向量

至于您可以做什么,最安全的做法是从数组切换到。A
std::vector
基本上是一个动态分配的数组,具有一些方便的功能,这意味着您不必担心动态分配。声明向量的典型方法如下:

std::vector<double> data;
data.reserve(ndata);
可以使用类似于数组的语法来检索数据:
data[count]

向量,第2部分

使用向量时可能会考虑另一种方法。可以在指定变量的同时声明变量。

std::vector<double> data(ndata);
您也可以保留
x
并将其分配给
data[count]
,但在这一点上,
push\u back
方法可以更清楚地说明发生了什么

向量可以做更多的事情;希望这足以让您开始

动态和手动

如果出于任何原因无法使用向量,您可能会被困在自己管理动态内存分配和取消分配的过程中。另一个答案涵盖了这一点,因此,如果是这种情况,我将让您参考该答案

data.push_back(x);
std::vector<double> data(ndata);
cin >> data[count];