如何在其他地方的函数中使用变量的值?

时间:2019-04-03 11:51:28

标签: c variables

我有一个特定的程序,可让您注册成员并将其姓名和生日保存到数组中。进行此注册的特定功能使用以下代码;

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 :(得分:0)

您既需要获取参数 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);
  ...
}

答案 1 :(得分:0)

假设您将成员保留在全局数组中,那么您还可以将数组中的成员数量也作为全局变量进行管理,例如

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
}