C语言未能正常读入数据

我在测试用结构体写的学生管理系统的时候,测试文件读取子程序,运行之后发现程序在不停地循环读取我已设置好的文件(trial.txt),并没有在文本内容结束后就停止读取。想知道为什么会这样?

以下为源代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct information
{
long id;
char name[10];
char major[10];
int score[4];
}INFO;

void main()
{
INFO info[4];
FILE*fp;
int i,j,k,n;
if((fp=fopen("trial.txt","r"))==NULL)
{
printf("无法导入,请重新操作\n");
exit(0);
}

for(i=0;!feof(fp);i++)
{ 
fscanf(fp,"%ld%s%s",&info[i].id,info[i].name,info[i].major);
    for(j=0;j<4;j++)
    {     
            fscanf(fp,"%10f",&info[i].score[j]);
    }
}
fclose(fp);

程序执行结果:

img


(截图是我发现程序在异常持续读取后,点击界面使其中止后截屏得到的)

for(i=0;!feof(fp);i++) 这个地方错了

可以用
while (fgets(buf, 1024, fp) != NULL)
{
fscanf(fp,"%ld%s%s",&info[i].id,info[i].name,info[i].major);
}