2016-11-14 9 views
-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++) 
+4

Q:この「ManagedArray」は何ですか?なぜ[std :: vector](http://en.cppreference.com/w/cpp/container/vector)を使っていないのですか? – paulsm4

+0

@ paulsm4:これは.NETのものです。私は問題がここにあると思うが、私はC++の.NETについて何も知らない。 – Djee

+1

'do {cin >> userInput; AddingNumbersToTheList =!std :: cin.fail(); if(addingNumbersToTheList){...} while(cin >> userInput){...} ' – user4581301

答えて

0

私は、ループと配列のために、アレイ内のすべての可能な数を反復処理する必要がありました。

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

for (int i = 0; i < ma.Size(); i++) 
{ 
    elements[i] = ma.elements[i]; 
} 
numberOfElements = ma.numberOfElements; 
関連する問題