【问题标题】:Passing variables between functions in C++在 C++ 中的函数之间传递变量
【发布时间】:2012-10-31 11:49:59
【问题描述】:

我的任务是输入和读取()几个双变量并将它们存储在向量中,然后函数计算()应该计算存储在向量中的所有变量的总和及其平均值。我已经修复了这些功能,它们运行良好。问题在于最终函数 print() .. 该函数应该打印出结果 - 'sum' 和 'average' 变量。但是我的 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;
}

在此先感谢您的帮助,我知道我的风险在于函数之间的变量传递,但我花了一整天的时间调试和阅读教程,但没有任何运气。

【问题讨论】:

    标签: c++


    【解决方案1】:

    只需在函数声明中的变量前添加 & ,它就会传递对变量的引用!

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

    【讨论】:

      【解决方案2】:

      你的程序有几个缺陷:

      1. compute 的声明最好改为:

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

        传递const vector&lt;double&gt;&amp; 使其在函数中不可修改,并采用average/sum 的引用使得更改传入参数成为可能,请参阅“形式参数”和“实际参数”here 的更多内容。

      2. 你最好将函数read声明为:

        void read(vector<double>& myVector);
        

        因为这将避免在函数read 返回时复制向量。

      【讨论】:

        【解决方案3】:

        你忘记了计算函数声明中的引用运算符(&):没有它,main()函数中的变量将不会被修改:写

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

        而不是你写的,它应该可以工作。

        【讨论】:

          猜你喜欢
          • 2020-07-02
          • 1970-01-01
          • 2013-04-09
          • 2013-03-07
          • 1970-01-01
          • 2017-03-01
          • 2019-09-12
          相关资源
          最近更新 更多