Как использовать значение переменной в функции где-нибудь еще? - PullRequest
0 голосов
/ 03 апреля 2019

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

char regmember (struct member a[])
{

    int i = 0;
    char wow;
    do
    {
        //registration
        printf("\n Do you want to add someone else (y/n):");
        scanf(" %c",&wow);
        i++
    }while(wow != 'n');

    int nrofmembers = i;
    return nrofmembers;
}

-> Я сохраняю пользовательский ввод с помощью

scanf("%s",a[i].name) и scanf("%d",&a[i].ID);

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

int nrofmembers = i;

Моя проблема в том, что я не могу использовать эту переменную (nrofmembers), где, хотя я пытался вернуть ее, есть какой-нибудь совет?

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Предположим, вы храните элементы в глобальном массиве, тогда вы можете управлять тем, сколько элементов в вашем массиве также в виде глобальной переменной, например

struct member gMembers[MAX_MEMBERS];
int gnMembers;

Ваша функция теперь может работать с этим массивом напрямую:

int regmember (void)
{
    if (gnMembers < MAX_MEMBERS)
    {
        // add member
        if (scanf("%s",gMembers[gnMembers].name)==1
        &&  scanf("%d",&gMembers[gnMembers].ID)==1) {
            gnMembers++;
            return 1; // success
        }
    }
    return 0; // array full or scanf error
}
0 голосов
/ 03 апреля 2019

вам нужно и получить i в параметре, и вернуть новое значение, вы можете сделать

int regmember (struct member a[], int i)
{
    ... use and modify i

    return i;
}

или использовать его как переменную ввода-вывода

void regmember (struct member a[], int * i)
{
    ... use and modify *i
}

В первом случае вызывающая сторона делает, например:

int i = 0;

for (...) {
  ...
  i = regmember(..., i);
  ...
}

, а во втором случае:

int i = 0;

for (...) {
  ...
  regmember(..., &i);
  ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...