当未知文件长度,使用feof(FILE *Stream)判断文件结尾,它的实现原理:
feof(fp)通过fread/fscanf是否读写出错判断,应该在读写函数之后进行判断,否则多进行一轮循环
//必须用文件来存储员工信息:
//开始运行程序时从文件中读取员工信息到链表,退出程序时将员工信息保存到文件中。
void Load() {
if ((fp = fopen("Employee.txt", "ab+")) == NULL)
{
printf("打开文件出错!\n");
exit(1);
}
//未知文件长度,使用feof(FILE *Stream)判断文件结尾
while (!feof(fp))
{
//feof(fp)通过fread/fscanf是否读写出错判断,应该在读写函数之后进行判断,否则多进行一轮循环
if (fread(&Employee1[i], sizeof(struct Employee), 1, fp) ==0)
{
continue;
}
Employee *p, *q;//分别用于指向第i个结点和待插入的新结点
p = head;
while (p->next != NULL)//把指针P定位到链表尾位置
{
p = p->next;
}
q = (Employee *)malloc(sizeof(Employee));//用指针Q申请新结点
//存入数据到链表结点
q->id = Employee1[i].id;
strcpy(q->name, Employee1[i].name);
strcpy(q->sex, Employee1[i].sex);
q->age = Employee1[i].age;
strcpy(q->department, Employee1[i].department);
q->post = Employee1[i].post;
q->workHour = Employee1[i].workHour;
q->sales = Employee1[i].sales;//当月月销售额
q->salary = Employee1[i].salary;//月工资
q->next = p->next;//Q指针的next域指向P指针的next域,即第i个结点
p->next = q;
i++;
}
fclose(fp);
}