你的文件中的存放的是
45sf847et9648et98
你说 如果你从输入端输入的数据时这样的,你以
for(i=0;i<3;i++)
fscanf(p,"%d%s%d",&a[i].no,&a[i].name,&a[i].score);
它会怎么读取?
45存在第一个位置,后面的字符串sf847et9648et98存放在第二个位置,后面的都没有读入到数据啊。之所以会输出数据,是因为你的a[1]和a[2]里面开始就存放的输入数据,没有清空。
不相信重新定义一个 AAA b[100];
for(i=0;i<3;i++)
fscanf(p,"%d%s%d",&a[i].no,&a[i].name,&a[i].score);
for(i=0;i<3;i++)
{
printf("%d %s %d\n",a[i].no,a[i].name,a[i].score);
}
把这后面的输入输出改成b看看是啥,这个不管rewind的事情,rewind 用的是对的,只是输入格式不对罢了。
把输入格式改为
for(i=0;i<3;i++)
fprintf(p,"%d %s %d",a[i].no,a[i].name,a[i].score);中间加个空格试试
rewind(p);是将文件指针移到文件头
因为你输入数据后文件指针已经到了文件末尾,读取时数据为空