2012-11-12 57 views
1

我的任務是鍵入並讀取()幾個雙變量並將它們存儲在向量中,然後函數compute()應該計算存儲在向量中的所有變量的總和及其平均值。我已經修復了這些功能,並且它們運行良好。問題是最終的函數print()..函數應該輸出結果 - 'sum'和'average'變量。但是我的print()代碼不能正常工作並打印出錯誤的數字。這裏是我的代碼:在C++中的函數之間傳遞變量

#include <iomanip> 
#include <cstdlib> 
#include <iostream> 
#include <vector> 
using namespace std; 

vector<double> read(){//this function works fine 
    cout << "Write some numbers with space between them?" << endl; 
    double numz; 
    vector<double> myvector; 
    do { 
    cin >> numz; 
    myvector.push_back (numz); 
    } while (numz); 
    return myvector; 
} 

void compute(double average, double sum, vector<double> &myvector){//this function works fine 
//if i put cout in this function it calculates correctly 
    vector<double>::iterator it; 
    for (it=myvector.begin() ; it < myvector.end()-1; it++){ 
    sum += *it; 
    } 
    average = sum/myvector.size(); 

} 

void print(double average, double sum){//this is printing out wrong numbers 
    cout.precision(2); 
    cout << sum << endl; 
    cout << fixed << average << endl; 
} 


int main(){ 
    vector<double> myvector = read(); 
    double average; 
    double sum; 
    compute(average, sum, myvector); 
    print(average, sum);//this is printing out wrong numbers 

    system("pause"); 
    return 0; 
} 

在此先感謝您的幫助,我明白我的mystake在功能之間的變量傳遞,但我花了整整一天的調試和閱讀教程沒有任何的運氣。

+3

查找參考文獻。 –

回答

0

有幾個缺點在你的程序:

  1. compute聲明也許不如改爲:

    void compute(const vector<double> &myvector, double &average, double &sum); 
    

    傳遞一個const vector<double>&使得功能也不可修改,並採取average/sum的引用使得可以更改傳入參數,更多的參見「正式參數」和「實際參數」here

  2. 你最好聲明功能read爲:

    void read(vector<double>& myVector); 
    

    ,因爲這將避免當函數返回read向量的複製。

4

只需在函數聲明中的變量前添加&,它將傳遞對變量的引用!

void compute(double& average, double& sum, vector<double> &myvector) 
0

你忘了在計算函數的聲明引用操作符(&):沒有它的變量在main()函數將不會被修改:記

void compute(double &average, double &sum, vector<double> &myvector){//this function works fine 

什麼,而不是你寫了,它應該工作。