我已经创建了一个结构"员工"
#define MAX_SIZE 20
typedef struct Employee{
char name[MAX_SIZE];
int s;
int e;
} employee_s;
我需要创建一个包含2名员工的数组,并要求用户初始化它们,我尝试似乎没有任何工作,
void main()
{
int i, s, e;
char name[10];
Employee* e[3];
*e = (Employee*)malloc(sizeof(Employee)*ARR_SIZE);
for(i=0; i < 3; i++)
{
fflush(stdin);
puts("Please enter Employee's name:");
scanf("%c",&name);
*e[i]->name = name;
puts("Please enter Employee's salary:");
scanf("%d",&s);
*e[i]->s= s;
puts("Please enter Employee's experience:");
scanf("%d",&e);
*e[i]->e=e;
}
}
p.s:我不必使用动态分配,
我做错了什么?
答案 0 :(得分:4)
这里有几个错误:
Employee
不是有效类型。 struct Employee
是employee_s
,e
。name
在多个地方定义%s
中阅读时,请使用%c
(对于字符串),而不是malloc
(对于字符)fflush(stdin)
。scanf
。这是未定义的行为。int main()
{
int i;
employee_s e[3];
for(i=0; i < 3; i++)
{
puts("Please enter Employee's name:");
scanf(" %s",&e[i].name);
puts("Please enter Employee's salary:");
scanf(" %d",&e[i].s);
puts("Please enter Employee's experience:");
scanf(" %d",&e[i].e);
}
for(i=0; i < 3; i++) {
printf("emp %d: name=%s, sal=%d, exp=%d\n", i, e[i].name, e[i].s, e[i].e);
}
}
次调用中,将空格作为字符串中的第一个字符。这将允许传递任何换行符。结果:
long unsigned = Integer.toUnsignedLong(myIntger);
答案 1 :(得分:2)
你的声明落后了。这样:
typedef struct Employee{
char name[MAX_SIZE];
int s;
int e;
} employee_s;
声明名为employee_s
的类型等同于struct Employee
,并进一步声明struct Employee
。你似乎想要这个,而不是:
typedef struct employee_s {
char name[MAX_SIZE];
int s;
int e;
} Employee;
在这种情况下,如果您愿意,可以省略employee_s
;也许这会让人感到困惑。
此外,您将以非常奇怪的方式进行分配,特别是因为您不需要动态分配。为什么不这样做:
Employee e[3];
?然后你可以(并且应该)完全跳过malloc()
。然后,您将通过e[0].name
等表单引用数组元素的成员。
答案 2 :(得分:1)
您可以轻松完成此操作,无需动态内存分配,如下所示。
#include <stdio.h>
#define MAX_SIZE 20
typedef struct Employee{
char name[MAX_SIZE];
int s;
int e;
} employee_alias;
int main(void) {
int i;
employee_alias e[3];
for(i=0; i < 3; i++)
{
puts("Please enter Employee's name:");
scanf("%s",e[i].name);
puts("Please enter Employee's salary:");
scanf("%d",&e[i].s);
puts("Please enter Employee's experience:");
scanf("%d",&e[i].e);
printf("Entered Data\n");
printf("Name : %s\n",e[i].name);
printf("Salary : %d\n",e[i].s);
printf("Experience : %d\n",e[i].e);
}
return 0;
}