Полагаю, ваша проблема на самом деле в этом.Первоначально ваш массив выглядел примерно так:
EMP ID EMP AGE EMP SALARY
====== ======= ==========
222 22 22222.22
333 33 33333.33
444 44 44444.44
555 55 55555.55
Вы хотите изменить это на следующее:
EMP ID EMP AGE EMP SALARY
====== ======= ==========
222 22 22222.22
666 66 66666.66
444 44 44444.44
555 55 55555.55
В этом случае, я предлагаю вам сделать это при удалениистолбец с 333, вы заменяете все элементы структуры на 0, (0 в этом случае будет означать, что столбец пуст) вместо перемещения столбцов.В своем коде для добавления новых сотрудников проверьте, равен ли какой-либо номер сотрудника 0. Это даст вам новое местоположение, где вы должны добавить нового сотрудника.
По сути, внесите следующее изменение в свой код «Удалить сотрудника»
if (i != nEmp) {
check = 0;
printf("Employee %d will be removed\n\n", emp[i].number);
emp[i].number = 0;
emp[i].age = 0;
emp[i].salary = 0.0;
nEmp -= 1;
}
и внесите это изменение в свой код «добавления сотрудника»
if (nEmp < SIZE) {
int empIndex = 0; //new variable to find the next possible location to store the employee
while ((emp[empIndex].number != 0) && (empIndex < SIZE)) {
empIndex++;
}
printf("Enter Employee ID: ");
scanf("%d", &emp[empIndex].number);
printf("Enter Employee Age: ");
scanf("%d", &emp[empIndex].age);
printf("Enter Employee Salary: ");
scanf("%lf", &emp[empIndex].salary);
printf("\n");
nEmp++;
}
СделатьОбязательно используйте empIndex
вместо nEmp
для хранения нового сотрудника.Обратите внимание, что если вы удаляете сотрудника, но не добавляете обратно ни одного сотрудника, вы будете распечатывать нули для той записи, которую вы удалили.Кроме того, обратите внимание, что это означает, что вам нужно распечатать все элементы в массиве, а не только первые несколько, так как вы могли бы иметь сотрудника в последнем месте массива, но не в середине.