问题描述
我正在处理一项任务,我需要根据员工姓氏按字母顺序对结构进行排序。我已经编写了程序并且可以运行它,但不幸的是它似乎正在删除结构中的所有姓氏。
现在该程序将一个文件中包含的 40 名员工的数据读取到一个结构体中。
我在排序功能中遗漏了什么吗?
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
typedef struct {
int employee_code;
char *employee_surname[20];
char *employee_forname[20];
int insurable_weeks;
float gross_pay;
float subsidy;
} employee;
employee tempEmployee[100];
void load_data(fp);
void display_menu();
void view_all_employees();
void add_new_employee();
void delete_employee();
void view_qualifying_employees();
void find_disqualified_employees();
void sort_employees_by_subsidy_amount();
void view_total_subsidy_amount();
void sort_employees_by_name();
int main(void)
{
FILE* fp = fopen("data.txt","r");;
int selection=0,state;
int n=0;
load_data(fp);//open file if it exists. If not,create new file.
fclose(fp);
printf("Please choose an option (1-9)...\n");
do {
display_menu();
//scanf("%d",&selection);
if (state = (scanf("%d",&selection)) != 1) //validates that user is only entering integers.
{
printf("\n\n**** Please only enter numbers. Character strings are not accepted. ****\n\n");
while (getchar() != '\n'); //clears user input to avoid infinite loop.
}
else if (selection < 0 || selection >9)
{
printf("\nInvalid entry. Only enter digits between 1-9,\n");
}
else
{
switch (selection)
{
case 1:
add_new_employee();//view new employees
break;
case 2:
delete_employee();//delete employees
break;
case 3:
view_all_employees();//view all employees and related info
break;
case 4:
view_qualifying_employees();//view employees qualifying for subsidy
break;
case 5:
find_disqualified_employees();//find employees disqualified for subsidy
break;
case 6:
sort_employees_by_name();//sort employee by surname
break;
case 7:
sort_employees_by_subsidy_amount();
break;
case 8:
view_total_subsidy_amount();//total subsidy amount for all employees
break;
//more cases added later
}
}
} while (selection != 9);
printf("\nThank you for using the program! Terminating...\n");
return 0;
}
这是导致问题的函数:
void sort_employees_by_name()
{
int n = 100,i,j;
char temp[20];
for (i = 0; i <= n; i++)
{
for (j = 0; j <= n - i; j++)
{
if (strcmp(tempEmployee[j].employee_surname,tempEmployee[j + 1].employee_surname) > 0)
{
strcpy(temp,tempEmployee[j].employee_surname);
strcpy(tempEmployee[j].employee_surname,tempEmployee[j + 1].employee_surname);
strcpy(tempEmployee[j + 1].employee_surname,temp);
}
}
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)