我有一个为写/读打开的文件(fopen(name,"wb+")),其中包含下面的结构的加载
struct pedia
{
int code;
char descr[50];
int TM;
int pos;
int flag;
};
整个文件用从0到文件大小(用户给出大小)的代码初始化,标志等于0,descr="和TM=pos=-1
当我要求用户写下他想要更新的注册号,并打印保存在那里的结构时,它会正确打印。
此外,当我调用用户为结构中的每个变量设置新值的输入函数时,我会立即打印代码、descr等,并成功更改它们。
然而,当我使用fwrite将结构写入文件时,它只成功地在文件中写入了1项。
void fileupdate(FILE *f,int filesize)
{
struct pedia *field;
field=(struct pedia *)malloc(sizeof(struct pedia));
int k,key;
char opt[5];
int num=0;
while(1)
{
puts("nUPDATEn");
printf("nType the # of the registration you want to update (key must be between 0 and %d) nnkey:",filesize);
scanf("%d",&key);
getchar();
if(key>=0 && key<=filesize)
{
fseek(f,sizeof(struct pedia)*key,SEEK_SET);
fread(field,sizeof(struct pedia),1,f);
printf("%d,%s,%d,%d,%dn",field->code,field->descr,field->TM,field->pos,field->flag);
if(field->flag==0)
{
puts("type yes to register new info or no to cancel the updaten");
fgets(opt,sizeof(char)*5,stdin);
if(isspace(*(opt+strlen(opt)-1)))
*(opt+strlen(opt)-1)=' ';
if(strcmp(opt,"yes"))
continue;
printmask();
input(&field);
num=fwrite(field,sizeof(struct pedia),1,f);
printf("n%d,%s,%d,%d,%dn",field->code,field->descr,field->TM,field->pos,field->flag);
printf("num=%dn",num);
}
}
}
fread()
和fwrite()
之间没有fseek()
,因此fwrite()
不会覆盖您想要更新的结构,而是覆盖下一个结构。