我创建了一个程序来获取浮点值,直到输入非数字。然后程序将打印输入的数字,如{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++)
答案 0 :(得分:0)
我需要使用for循环和数组迭代数组中的每个可能的数字。
elements = new float[ma.Size()];
for (int i = 0; i < ma.Size(); i++)
{
elements[i] = ma.elements[i];
}
numberOfElements = ma.numberOfElements;