-2
浮動小数値を入力するためのプログラムを作成しました。プログラムは、{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;
}
だから、例えば、I 1、2、3を入力し、 プログラムがプリントアウトになる{-4.22017e + 37、1、2.89451e + 31}
誰かが私がこの方法で間違っていることを指摘できますか?
編集:私はコピーコンストラクタを修正しました。誰かが私に数字の合計で をどのように置き換えるのかを教えてもらえますか?中:
elements = new float[10];
と
for (int i = 0; i <10; i++)
Q:この「ManagedArray」は何ですか?なぜ[std :: vector](http://en.cppreference.com/w/cpp/container/vector)を使っていないのですか? – paulsm4
@ paulsm4:これは.NETのものです。私は問題がここにあると思うが、私はC++の.NETについて何も知らない。 – Djee
'do {cin >> userInput; AddingNumbersToTheList =!std :: cin.fail(); if(addingNumbersToTheList){...} while(cin >> userInput){...} ' – user4581301