我试图通过我制作的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);
提前感谢您提供任何帮助,如果我格式化了这个错误,我仍然会道歉,仍在学习使用堆栈溢出,对不起!
答案 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);
...
}