我正在编写一个简单的程序来记录员工的数据。 我有一个初始化为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
我尝试过在网上看到的所有内容,没有任何帮助。 提前谢谢!
答案 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
循环,它遍历数组的所有元素并打印出每个元素的每个字段。但是,由于您的字段为int
和double
,因此您使用的功能(可能类似于printf("%d\t%d\t%f", emp[i].id, emp[i].age, emp[i].salary)
)。然后将您的归零字段转换为它们的字符表示,即“0”并打印到屏幕上。为了得到你想要的结果,最简单的方法是将'\ 0'改为“非法值”,比如-1。然后,每次尝试打印条目时都可以检查该值。像if(emp[i].id == -1) continue;
这样的东西应该可以解决问题。