c.fwrite中的二进制文件更新没有成功写入整个结构



我有一个为写/读打开的文件(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()不会覆盖您想要更新的结构,而是覆盖下一个结构。

相关内容

  • 没有找到相关文章

最新更新