1

私の仕事は、いくつかの double 変数を入力して read() し、それらをベクトルに格納することです。その後、関数 compute() は、ベクトルに格納されているすべての変数の合計とそれらの平均を計算する必要があります。これらの機能を修正しましたが、うまく機能します。問題は最終関数 print() にあります..関数は結果を出力する必要があります-「合計」変数と「平均」変数。しかし、print() のコードが正しく機能せず、間違った数字が出力されます。これが私のコードです:

#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;
}

事前に助けてくれてありがとう、私は私の問題が関数間の変数の受け渡しにあることを理解していますが、私は一日中デバッグとチュートリアルの読み取りに運がありませんでした。

4

3 に答える 3

5

関数宣言で変数の前に & を追加するだけで、変数への参照が渡されます!

void compute(double& average, double& sum, vector<double> &myvector)
于 2012-11-12T01:11:39.390 に答える
0

あなたのプログラムにはいくつかの欠陥があります:

  1. 宣言を次のcomputeように変更したほうがよい:

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

    a を渡すconst vector<double>&と、関数内で変更できなくなり、 の参照をaverage/sum使用して引数の受け渡しを変更できます。「仮引数」と「実際の引数」の詳細については、こちらを参照してください

  2. read関数を次のように宣言することをお勧めします。

    void read(vector<double>& myVector);
    

    readこれにより、関数が戻るときにベクトルのコピーが回避されるためです。

于 2012-11-12T02:23:22.880 に答える
0

compute 関数の宣言で参照演算子 (&) を忘れました: これがないと main() 関数の変数は変更されません:

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

あなたが書いたものの代わりに、それはうまくいくはずです。

于 2012-11-12T01:14:59.563 に答える