我想知道如何使用减量删除之前输入的信息。
case 4: printf("Remove Employee\n");
printf("===============\n");
do{
printf("Enter Employee ID: ");
scanf("%d", &number);
int i;
for(i=0;i<NOE; i--){
if(number == emp[i].Int_Num){
printf("Employee %d will be removed", emp[i].Int_Num);
// for(i=0;i<NOE; i++){
-- emp[i].Int_Num, --emp[i].Salary, --emp[i].Age;
// scanf("%11lf", &emp[i].Salary);
flag = 1;
break;
最佳答案
元素数量以任意顺序频繁变化的集合的典型数据结构是链表。 (或者,如果您需要更快的访问速度并有一个订单标准,例如您的员工编号、排序树)。您可以使用 malloc()
分配新元素(此处为:employees),并使用 free
将它们真正从内存中删除。
或者,如果已知最大员工数量并且您有足够的内存,则可以使用数组,就像您在此处所做的那样。数组中的元素数量将是预期的最大员工数量;因此,即使员工很少,程序也总是需要最大的内存量。另一方面,程序的内存占用在编译时是静态已知的,这可能是一个优点。
数组中的元素数量无法更改(除非动态分配整个数组并在需要时重新分配)。正如 Bo Persson 所建议的,添加新员工或删除现有员工将通过对正在使用的元素进行标记来完成。这可能是一个额外的 bool 标志,或者现有字段之一中的特殊值。
实际上,您将以这种方式编写自己的原始动态内存管理,并将数组用作“竞技场”。与您只使用内置的相比,它可能会出现更多错误并且速度更慢。
关于c - 如何从结构体中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46752359/