Передача и обновление структурного массива - PullRequest
0 голосов
/ 23 февраля 2019

Так что у меня возникли проблемы с моей программой.Кажется, он не заполняет массив правильно.Кажется, он не заполняет пассивный элемент 0, хотя я увеличиваю i.Когда я отлаживаюсь и возвращаюсь, я остаюсь нулевым.Должен ли я делать что-то другое?Я чувствую, что передаю или обновляю массив неправильно.Не могу использовать библиотеки 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 голосов
/ 23 февраля 2019

clientCount только увеличивается в этой области функций.Когда эта функция переходит к своему оператору возврата, все переменные и вся работа, которую она выполняла, полностью исчезают.

Вы передаете clientCount по значению, а не по ссылке, поэтому clientCount всегда будет равен 0, и приращение его внутри этой локальной функции фактически не изменит значение clientCount вне функции.

Что вам нужно сделать, это передать его по ссылке.

РЕДАКТИРОВАТЬ: выбранный ответ не объясняет, почему его решение работает.Предоставленный ответ неправильный.

Причина, по которой код работает, потому что вы снова передаете по ссылке, а не по значению.

0 голосов
/ 23 февраля 2019

Причина, по которой массив не имеет значений после первого, состоит в том, что вы никогда не достигаете переданного первого элемента.Вы увеличиваете 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";

}
...