繁体   English   中英

在C中传递结构数组的元素

[英]Passing an element of an array of structs in C

我试图传递我制作的20个“数据库”结构之一

这是我的函数“添加”的原型

void add(struct database 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:函数add(database)中类型为'int'的参数的类型'database'中未实现'operator +'

它说错误在

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

在此先感谢您提供的任何帮助,如果出现格式错误,我将致歉,仍在学习使用堆栈溢出功能,非常抱歉!

add(struct database test)声明一个struct database作为参数。 这不是一个数组,因此无法对其进行索引。

所以

test[a]

是无效的。


另外, int a内部add()是从不同int a中所定义main() add()内部,后者a被前者a隐藏。


另外^ 2,您还向add()传递了main()声明的数组元素的副本。 因此,当从add()返回时,为在侧面add()中进行test所做的任何修改都会丢失。 它们在main()的数组中不可见。

这是您需要做的以使其正确的操作:

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);
    ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM