关于fwrite和fread函数的使用。望指点,谢谢!
最近在温习c时,写了个小程序要实现的功能:输入三条记录写入文件stu1中,
然后读取显示,在wintc中,调试通过,显示结果总读不对。
程序如下:
/* NONAME.C -- file write and read */
#include "stdio.h"
#include "conio.h"
#include "malloc.h"
struct stu
{
char sno[2];
char sname[3];
int age;
};
main()
{
int i;
struct stu *s=(struct stu*)malloc(sizeof(struct stu));
FILE *fpw,*fpr;
printf("\n\n======write======\n");
fpw=fopen("stu1","ab");
if(fpw)
{
for(i=0;i<3;i++)
{
printf("sno:");
scanf("%s\n",&s->sno);
printf("sname:");
scanf("%s\n",&s->sname);
printf("age:");
scanf("%d\n",&s->age);
/*
printf("sno,sname,age:\n");
scanf("%s,%s,%d\n",&s->sno,&s->sname,&s->age);
s->sno[2]='\0';
s->sname[3]='\0';
*/
fwrite(s,sizeof(struct stu),1,fpw);
}
}
else
{
printf("open failed!");
exit(0);
}
/**/
printf("\n\n======read======\n\n\n");
fpr=fopen("stu1","rb");
if(fpr)
{
i=0;
while(!feof(fpr))
{
fseek(fpr,i*sizeof(struct stu),0);
fread(s,sizeof(struct stu),1,fpr);
printf("sno:%s\n",s->sno);
printf("sname:%s\n",s->sname);
printf("age:%d\n",s->age);
i++;
}
}
else
{
printf("open failed!");
exit(0);
}
printf("\n==over==\n");
free(s);
getch();
}
然后读取显示,在wintc中,调试通过,显示结果总读不对。
程序如下:
/* NONAME.C -- file write and read */
#include "stdio.h"
#include "conio.h"
#include "malloc.h"
struct stu
{
char sno[2];
char sname[3];
int age;
};
main()
{
int i;
struct stu *s=(struct stu*)malloc(sizeof(struct stu));
FILE *fpw,*fpr;
printf("\n\n======write======\n");
fpw=fopen("stu1","ab");
if(fpw)
{
for(i=0;i<3;i++)
{
printf("sno:");
scanf("%s\n",&s->sno);
printf("sname:");
scanf("%s\n",&s->sname);
printf("age:");
scanf("%d\n",&s->age);
/*
printf("sno,sname,age:\n");
scanf("%s,%s,%d\n",&s->sno,&s->sname,&s->age);
s->sno[2]='\0';
s->sname[3]='\0';
*/
fwrite(s,sizeof(struct stu),1,fpw);
}
}
else
{
printf("open failed!");
exit(0);
}
/**/
printf("\n\n======read======\n\n\n");
fpr=fopen("stu1","rb");
if(fpr)
{
i=0;
while(!feof(fpr))
{
fseek(fpr,i*sizeof(struct stu),0);
fread(s,sizeof(struct stu),1,fpr);
printf("sno:%s\n",s->sno);
printf("sname:%s\n",s->sname);
printf("age:%d\n",s->age);
i++;
}
}
else
{
printf("open failed!");
exit(0);
}
printf("\n==over==\n");
free(s);
getch();
}
...全文


