将struct数组设置为空/ null,而不是在C

时间:2018-04-27 05:10:10

标签: c

我正在编写一个简单的程序来记录员工的数据。 我有一个初始化为null的结构数组,但它显示" 0"而不是空白。

我的代码:

#define SIZE 4
struct EmployeeData {
     int id;
     int age;
     double salary;
};

struct EmployeeData emp[SIZE] = { { { 0 } } };

[ ... ]

    case 4: // Remove Employee
        printf("Remove Employee\n");
        printf("===============\n");
        printf("Enter Employee ID: ");
        scanf("%d", &j);

        do {
            for (i = 0; i < SIZE; i++) {
                if (j == emp[i].id) {
                    printf("Employee %d will be removed\n", j);
                    emp[i].id = '\0';
                    emp[i].age = '\0';
                    emp[i].salary = '\0';
                    end = 1;
                }
            }
        } while (end != 1);
        break;

当我显示结构数组时,它显示如下内容:

EMP ID  EMP AGE EMP SALARY
======  ======= ==========
   112       24    8999.99
   113       29    7999.99
   114       88    6999.99
     0        0       0.00

即使我删除/删除员工,也只是将其替换为0而不是将其留空。因此,当我删除一名员工时,例如id#113,我只想让它像:

EMP ID  EMP AGE EMP SALARY
======  ======= ==========
   112       24    8999.99
   114       88    6999.99

而不是:

EMP ID  EMP AGE EMP SALARY
======  ======= ==========
   112       24    8999.99
     0        0       0.00
   114       88    6999.99
     0        0       0.00

我尝试过在网上看到的所有内容,没有任何帮助。 提前谢谢!

2 个答案:

答案 0 :(得分:3)

您无法从数组中删除条目:数组大小设置为SIZE,因此您始终拥有SIZE个条目。

您可以使用其中一个字段的特定值来表示该条目无效或可用。 0的值id似乎适用于此,因为它是未在初始值设定项中明确指定的结构和数组元素的默认值,以及由 delete 代码设置的值。

只需在打印循环中测试此值并跳过这些记录。

第一个列表将成为:

EMP ID  EMP AGE EMP SALARY
======  ======= ==========
   112       24    8999.99
   113       29    7999.99
   114       88    6999.99

删除后员工ID#113的记录:

EMP ID  EMP AGE EMP SALARY
======  ======= ==========
   112       24    8999.99
   114       88    6999.99

答案 1 :(得分:2)

您的数组是一个结构数组。在数组的每个元素中有三个数字字段,设置为'\ 0',等于零。我假设您使用的是一个简单的for循环,它遍历数组的所有元素并打印出每个元素的每个字段。但是,由于您的字段为intdouble,因此您使用的功能(可能类似于printf("%d\t%d\t%f", emp[i].id, emp[i].age, emp[i].salary))。然后将您的归零字段转换为它们的字符表示,即“0”并打印到屏幕上。为了得到你想要的结果,最简单的方法是将'\ 0'改为“非法值”,比如-1。然后,每次尝试打印条目时都可以检查该值。像if(emp[i].id == -1) continue;这样的东西应该可以解决问题。