【问题标题】:Logic of array with structures具有结构的数组的逻辑
【发布时间】:2019-09-17 13:34:54
【问题描述】:

我很难在下面的代码中实现新员工介绍逻辑。通过确定新数量并根据它重新定位向量,第一个新员工会提前或迟到或程序正在终止。

 #include <stdio.h>
 #include <stdlib.h>

 typedef struct {
char * name;
char * email;
int age;
}Employee;

   int main () {

 int i, option, employeeInitialQuantity, newEmployeeQuantity;

 printf ("How many employees would you like to register?");
scanf ("%d", &employeeInitialQuantity);
Employee *employees = malloc (employeeInitialQuantity * sizeof (Employee));

 for (i = 0; i < employeeInitialQuantity; i++) {

    employees [i] .name = malloc (35);
    printf ("\nType employee name %d:", i);
    scanf ("%34s", employees[i].name);
    printf ("\n%s", employees [i].name);
    employees [i] .email = malloc (35);
    printf ("\nEnter Employee Email% d:", i);
    scanf ("%34s", employees [i].email);
    printf ("\n%s", employees [i].email);
    printf ("\nEnter employee age %d:", i);
    scanf ("%d", & employees [i].age);
    printf ("\n%d", employees [i].age);
}



    while (1) {

     printf ("1.Register more employees \n");
     printf ("2.List employees \n");
     printf ("3.Edit employee data \n");
     printf ("4.Delete Employee \n");
     scanf ("%d", &option);

     if (option == 1) {

    printf ("Do you want to register how many more employees?");
    scanf ("%d", &newEmployeeQuantity);


   employees = (Employee *) realloc (employees, newEmployeeQuantity * sizeof (Employee));

   for (i =  employeeInitialQuantity; i <= newEmployeeQuantity; i ++) {

  employees [i] .name = malloc (35);
   printf ("\nType employee name% d:", i);
   scanf ("%34s", employees [i] .name);
   printf ("\n%s", employees [i] .name);
   employees [i] .email = malloc (35);
   printf ("\nEnter Employee Email %d:", i);
   scanf ("%34s", employees [i].email);
   printf ("\n%s", employees [i].email);
   printf ("\nEnter employee age %d:", i);
   scanf ("%d", & employees[i] .age);
   printf ("\n%d", employees[i].age);
}
        employeeInitialQuantity = (employeeInitialQuantity + newEmployeeQuantity) -1;

}




 else if (option == 3) {

       printf ("Enter the employee number you wish to edit:");
       int number;
       scanf ("%d", & number);
       printf ("Enter new employee name% d:", number);
       scanf ("%34s", employees [number] .name);
       printf ("Enter new employee email% d:", number);
       scanf ("%34s", employees [number] .email);
       printf ("Enter new employee age %d:", number);
       scanf ("%d\n", & employees [number]. age);

 }

}

  return 0;

}

enter image description here

我正在尝试执行此语句:

制作一个管理员工(姓名、年龄、电子邮件)的程序。该程序应显示用户菜单, 有以下选项:

  1. 注册

A.该程序应该允许包含新员工,询问用户他想要包含多少新员工并将他们注册到员工数组中;

B.值得注意的是,应根据需要分配员工数组,避免 浪费内存;

C.名称和电子邮件字符串也必须动态分配,数组也应如此 员工。

  1. 列表

A.程序应显示注册员工列表,每行一个,用“------”分隔 --------------------- "。列表应在每一行显示姓名、电子邮件和年龄 如下:“姓名 - email@gmail.com - 25”。

  1. 编辑:

A.该程序应允许编辑特定员工。为此,应允许编辑。 来自员工在员工数组中的索引,或通过姓名搜索或 员工的电子邮件。

  1. 删除

A.该计划应允许排除特定员工。为此,应允许 从员工数组中的索引中删除员工,或从搜索中删除员工 员工姓名。

B.删除员工后,应重新排列数组,使其没有“漏洞”。

【问题讨论】:

    标签: c pointers data-structures


    【解决方案1】:

    您没有正确重新分配,在第二个参数或 realloc 中,您需要提供所需的总内存,而不仅仅是额外的内存

    代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct
    {
        char *name;
        char *email;
        int age;
    } Employee;
    
    int main ()
    {
        int i, option, employeeInitialQuantity, newEmployeeQuantity;
    
        printf("How many employees would you like to register?");
        scanf("%d", &employeeInitialQuantity);
        Employee *employees = malloc(employeeInitialQuantity * sizeof (Employee));
    
        for (i = 0; i < employeeInitialQuantity; i++)
        {
            employees[i].name = malloc(35);
            printf("\nType employee name %d:", i);
            scanf("%34s", employees[i].name);
            printf("\n%s", employees[i].name);
            employees[i].email = malloc(35);
            printf("\nEnter Employee Email %d:", i);
            scanf("%34s", employees[i].email);
            printf("\n%s", employees[i].email);
            printf("\nEnter employee age %d:", i);
            scanf("%d", &employees[i].age);
            printf("\n%d\n\n", employees[i].age);
        }
    
        while (1)
        {
            printf("1.Register more employees \n");
            printf("2.List employees \n");
            printf("3.Edit employee data \n");
            printf("4.Delete Employee \n");
            scanf("%d", &option);
    
            if (option == 1)
            {
                printf("Do you want to register how many more employees?");
                scanf("%d", &newEmployeeQuantity);
    
                employees = (Employee *)realloc(employees, (employeeInitialQuantity + newEmployeeQuantity) * sizeof(Employee));
    
                for (i =  employeeInitialQuantity; i < (employeeInitialQuantity + newEmployeeQuantity); i ++)
                {
                    employees[i].name = malloc(35);
                    printf("\nType employee name% d:", i);
                    scanf("%34s", employees[i].name);
                    printf("\n%s", employees[i].name);
                    employees[i].email = malloc(35);
                    printf("\nEnter Employee Email %d:", i);
                    scanf("%34s", employees[i].email);
                    printf("\n%s", employees[i].email);
                    printf("\nEnter employee age %d:", i);
                    scanf("%d", &employees[i].age);
                    printf("\n%d\n\n", employees[i].age);
                }
                employeeInitialQuantity = (employeeInitialQuantity + newEmployeeQuantity);
            }
    
            else if (option == 3)
            {
                printf ("Enter the employee number you wish to edit:");
                int number;
                scanf ("%d", & number);
                printf ("Enter new employee name% d:", number);
                scanf ("%34s", employees[number].name);
                printf ("Enter new employee email% d:", number);
                scanf ("%34s", employees[number].email);
                printf ("Enter new employee age %d:", number);
                scanf ("%d\n", &employees[number].age);
            }
        }
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-02
      • 2012-01-26
      • 2020-12-22
      • 1970-01-01
      相关资源
      最近更新 更多