如何解决feof函数的死循环?

void load_info ()
{
FILE* fp;
Employer* p;
int maxId = 0 ;
double a=0;
if((fp=fopen("d:\Salary.txt","r"))==NULL)
{//打开文件
printf ("文件读取失败");
exit(0);
}

p= (Employer*) malloc (sizeof ( Employer));//生成不存数据的头结点
p->next = NULL; 
head = p;//使头指针指向头结点  表头
q = p ; //q 永远都是最后一个

while(!feof(fp))//文件的问题 。。。  应该是刚才保存后出现的问题  也就是 你保存的有问题   我们可以试试
{

    p = ( Employer* ) malloc ( sizeof ( Employer ));//申请一个新的节点插入到q的后面

    fscanf(fp,"%d%s%s%d%s%d",&p->id,p->name,p->sex,&p->age,p->department,&p->post);
    //                                                     ↑你在这加什么&                    ↑还有这里 这个不删
     if(feof(fp))//读取结束跳出循环  
   {           
       p->next = NULL;  
       break;       
     }  

    if ( maxId< p->id )
        maxId = p-> id;//获得最大职工号
    p -> next = NULL;//将p->next指针设为空
    q ->next = p ;//连接新节点
    q = p;//j将q指针移到当前最后一个节点 

    if(feof(fp))
        break;


}
fclose(fp);

}

http://blog.csdn.net/shen_001/article/details/53786716