在C中传递一组结构元素

时间:2014-04-14 12:29:35

标签: c function struct parameter-passing argument-passing

我试图通过我制作的20个“数据库”结构中的一个

这是我的函数“add”

的原型
void add(struct database test);

我想传递我的数据库结构,现在我只称它为“test”

这是我的数据库结构

struct database
{
    char ID[6];
    char Duration[3];
};

main()
{

   char menu;
   struct database employee[20]; // I make 20 employee variables
   int a = 0;                    /*A counter I use to edit certain structs 
                                   ie a=2  "employee[a]" = "employee[2]" */

然后我调用这个函数:

add(employee[a]);
a++;  /*Once it exits this I want it to go to the next employee
       variable so I increment the counter */

实际功能如下:

void add(struct database test)
{
    static int a = 0;

    printf("\nPlease enter a 5 digit employee number: ");
    scanf("%s", test[a].ID);

    a++
}

这样做时我得到错误:

错误E2094 Assignment.c 64:'operator +'未在类型'database'中为函数add(database)中类型'int'的参数实现

它说错误在

scanf("%s", test[a].ID);

提前感谢您提供任何帮助,如果我格式化了这个错误,我仍然会道歉,仍在学习使用堆栈溢出,对不起!

2 个答案:

答案 0 :(得分:1)

add(struct database test)声明struct database作为参数。这不是数组,因此您无法将其编入索引。

所以

test[a]

无效。


int a内的add()int a中定义的main()不同。在add()内,后者a被前a隐藏。


同样^ 2您要传递add() main()中声明的数组元素的副本。因此,从test返回时,对add()侧的add()所做的任何修改都将丢失。它们在main()

中分组的数组中不可见

答案 1 :(得分:1)

这是你需要做的才能做到正确:

void add(struct database* test)
{
    printf("\nPlease enter a 5 digit employee number: ");
    scanf("%s",test->ID);
}

int main()
{
    ...
    int a;
    struct database employee[20];
    for (a=0; a<sizeof(employee)/sizeof(*employee); a++)
        add(&employee[a]); // or add(employee+a);
    ...
}