问题出在:
while(!feof(fp)){}
feof 的判断 应当放在读语句之后,越靠近越好。
你现在的判断实际上是在输出语句之后。就是说,fscanf(fp , "%ld。。。) 这句读到了 EOF, 你还执行下面的输出,到下一轮,才检查 feof 。所以多输出了最后一项。
在 fscanf(fp ..) 后,加:
if (feof(fp)) break; 跳出while 就可以了。
while(!feof(fp))
{
fscanf(fp , "%ld%s%d%d%d",&stud.num,stud.name,&stud.math,&stud.chinese,&stud.english );// "%ld%s%d%d%d后面加个\n就好了,读取文件的时候也要行像打印文件时一样要换行
stud.tottle = stud.math + stud.english + stud.chinese ;
stud.average = stud.tottle / 3;
printf("%ld\t%s\t%d\t%d\t%d\t%d\t%d\n",stud.num,stud.name,stud.math,stud.chinese,stud.english,stud.tottle,stud.average );
}
调试了半个小时 嘿嘿 现学现卖 如果满意请采纳我