c++ - 询问输入数据的数量并将输入数据存储在数组中

标签 c++

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

int array[ndata];

构建包含错误,因为变量 ndata 不是常量。如何更改数组大小的输入以允许这样做?

代码:

#include "pch.h"
#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;
        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;
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;
    }
}

}

请注意,您需要添加一些额外的检查以确保 ndata 不大于 MAXDATA

这是有效的,因为 data 是在 ndata 初始化之后声明的。请注意,如果您不检查以确保 ndata 小于 MAXDATA,您将面临堆栈溢出的风险。

动态分配

更好的方法是在堆上分配data 数组。这允许您将其设置为您想要的大小(达到您的操作系统和硬件的限制)。但它确实需要格外小心,以确保在您使用完数据后释放数据。它看起来像这样:

#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;
    }
    
}

关于c++ - 询问输入数据的数量并将输入数据存储在数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53795159/

相关文章:

c++ - 如何使用 http ://www. opengl-tutorial.org/正确学习 OpenGL?

android - 运行 build_android.sh 时出现错误 "C compiler works... no"

c++ - 为结构(或类)行为数组赋值

python - Cython:让python创建内存由C++填充

c++ - 将 const wchar_t* 和 cont char* 从 VB 传递到 C++ DLL

c++ - Coverity 为使用 'cov-build' 的构建定义了哪些预处理器符号?

c++ - 几个单例 : one for each task

c++ - 单独的字符串和整数时 sscanf_s 访问冲突

c++ - 使用现有 C++ 代码库支持 XNA WP7 和闪存 - 管道、工具和方法

c++ - QT 不清楚的移位运算符行为