我有一个特定的程序,可让您注册成员并将其姓名和生日保存到数组中。进行此注册的特定功能使用以下代码;
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
),即使我尝试返回该变量,也没有建议吗?
答案 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
}