创建struct(c)数组

时间:2015-09-02 15:40:46

标签: c

我已经创建了一个结构"员工"

#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:我不必使用动态分配,
我做错了什么?

谢谢你!

3 个答案:

答案 0 :(得分:4)

这里有几个错误:

  • Employee不是有效类型。 struct Employeeemployee_se
  • 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;
}