我有一个文件,为写/读(fopen(名称," 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("\nUPDATE\n");
printf("\nType the # of the registration you want to update (key must be between 0 and %d) \n\nkey:",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,%d\n",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 update\n");
fgets(opt,sizeof(char)*5,stdin);
if(isspace(*(opt+strlen(opt)-1)))
*(opt+strlen(opt)-1)='\0';
if(strcmp(opt,"yes"))
continue;
printmask();
input(&field);
num=fwrite(field,sizeof(struct pedia),1,f);
printf("\n%d,%s,%d,%d,%d\n",field->code,field->descr,field->TM,field->pos,field->flag);
printf("num=%d\n",num);
}
}
}
答案 0 :(得分:2)
fseek()
和fread()
之间没有fwrite()
,因此fwrite()
不会覆盖您想要更新的结构,而是覆盖下一个结构。