输入第一次浮动后的奇数结果

时间:2016-11-14 07:09:27

标签: c++

我创建了一个程序来获取浮点值,直到输入非数字。然后程序将打印输入的数字,如{n0,n1,...,},并汇总输入的数字并计算平均值。

我的问题是在打印出n0后,所有正在打印的数字都与输入的数字不匹配。

以下是该计划:

#include <iostream>
using namespace std;

class ManagedArray
{
    float *elements;
    int numberOfElements;
public:
    ManagedArray(float *ele, int NOE) 
        : elements(ele), numberOfElements(NOE)
    {}
    ManagedArray() 
    { 
        elements = NULL, numberOfElements = 0;  //default constructor
    }
    int Size();
    float get(int index);
    void add(float value);
    ~ManagedArray(); // Destructor
    ManagedArray(ManagedArray & ma); // copy constructor
    void print(ManagedArray ma);

};

float ManagedArray::get(int index) { return elements[index]; }
int ManagedArray::Size() { return numberOfElements; };
void ManagedArray::add(float value) 
{
    float * biggerArray = new float[numberOfElements + 1];
    if (elements != NULL)
    {
        // copy the old elements into the biggerArray
        for (int i = 0; i < numberOfElements; i++)
        {
            biggerArray[i] = elements[i];
        }
        // the old array is not needed anymore, we have a better copy
        delete[] elements;
    }
    // point at the new array
    elements = biggerArray;
    numberOfElements = numberOfElements + 1;

    // put the new number into the last element of the array
    elements[numberOfElements - 1] = value;
}
ManagedArray::~ManagedArray() { delete[] elements; }
ManagedArray::ManagedArray(ManagedArray & ma)
{
    elements = new float[10]; // put here to get the number of input here
for (int i = 0; i <10; i++) // put here to get the number of input here
{
    elements[i] = ma.elements[i];
}
numberOfElements = ma.numberOfElements;
}
void ManagedArray::print(ManagedArray ma)
{
    bool hasNumbers = ma.Size() > 0;
    if (hasNumbers) {
        // print the stored numbers
        cout << "Entered numbers: " << endl;
        cout << "{";
        for (int i = 0; i < ma.Size(); ++i)
        {
            if (i > 0)
            {
                cout << ", ";
            }
            cout << ma.get(i);
        }
        cout << "}" << endl;

        float sum = 0;
        for (int i = 0; i < ma.Size(); ++i)
        {
            sum += ma.get(i);
        }
        cout << "total: " << sum << endl;
        cout << "average: " << (sum / ma.Size()) << endl;
    }
    else {
        cout << "no numbers entered." << endl;
    }
}


int main()
{
    ManagedArray mArray; // default constructor call for ManagedArray
    float userInput;
    bool addingNumbersToTheList;
    cout << "Keep entering numbers. Enter a non-number to stop." << endl;
    do
    {
        cin >> userInput;
        addingNumbersToTheList = !std::cin.fail();
        if (addingNumbersToTheList) {

            mArray.add(userInput);  
        }
    } while (addingNumbersToTheList);

    ManagedArray copy(mArray);
    // fix cin after intentionally breaking it above.
    if (std::cin.fail())
    {
        std::cin.clear();
        while (std::cin.get() != '\n');
    }

    copy.print(copy); 
    copy.print(copy);
    cin.get();
    return 0;
}

因此,例如我输入1,2,3,a 该程序将打印出{1,-4.22017e + 37,2.89451e + 31}

有人能指出我用这种方法做错了吗?

编辑:我修复了复制构造函数。有人能告诉我如何更换 输入的数字总数为10?在:

elements = new float[10];

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

1 个答案:

答案 0 :(得分:0)

我需要使用for循环和数组迭代数组中的每个可能的数字。

elements = new float[ma.Size()];

for (int i = 0; i < ma.Size(); i++)
{
    elements[i] = ma.elements[i];
}
numberOfElements = ma.numberOfElements;