传递和更新结构数组

时间:2019-02-23 02:07:11

标签: c++ arrays struct reference

所以我的程序遇到了一些麻烦。它似乎无法正确填充数组。即使我增加了i,它似乎也没有填充传递元素0。当我调试并返回时,我保持为零。我应该做些不同的事情吗?我觉得我不正确地传递或更新了数组。不能真正使用任何STL库。预先感谢您的帮助。

struct Client
{
string name;
string zip;
double balance;
};

Client bAccounts [30]; //structural array in main()

int addClnt(Client(&bAccounts)[30], int); //prototype
int addClnt(Client(&bAccounts)[30], int clientCount) //function to add 
elements

{

cout << "Enter Account Name:" << endl;
cin >> bAccounts[i].name;

cout << "Enter Account Zip:" << endl;
cin >> bAccounts[i].zip;

cout << "Enter Account Balance:" << endl;
cin >> bAccounts[i].balance;


cout << "Enter Last Transaction" << endl;
cin >> bAccounts[i].lastTrans;

clientCount++; //to return number of clients added
i++; //to populate different element of array on next call of function.

return clientCount + 1;

}

所以我加+ 1返回clientCount,然后设置i = clientCount。但是,clientCount保持为零,并且不会更新。

2 个答案:

答案 0 :(得分:1)

第一个数组之后数组没有任何值的原因是因为您从未到达传递第一个元素。您在函数末尾增加i,但在addClnt函数的顶部,i设置回0。这只会继续覆盖旧的先前数据

编辑:

#include <iostream>

//use pass by reference (&)
void add_client(int& index_loc){

    //do whatever

    //this changes the actual value passed into the function 
    index_loc++;

}

int main(){

    int loc = 0;

    add_client(loc);
    add_client(loc);
    add_client(loc);

    //outputs 3 
    std::cout << "current #: " <<  loc << "\n";

}

答案 1 :(得分:0)

clientCount仅在该功能范围内递增。当该函数进入return语句时,所有变量及其所做的所有工作都完全消失了。

您是通过值而不是通过引用传递clientCount,因此clientCount始终为0,并且在该本地函数内部递增该值实际上不会更改函数的clientCount值

您需要做的是通过引用传递它。

编辑:选择的答案不能解释为什么他的解决方案有效。提供的答案不正确。

之所以能使代码起作用,是因为您再次通过引用而不是通过值传递。