/*fseek() 范例一:fseek(fp, 0L, SEEK_END); 解释:文件指针定位到文件末尾,偏移0个字节 范例二: fseek(fp,50L,0);或fseek(fp,50L,SEEK_SET); 解释:其作用是将位置指针移到离文件头50个字节处。 */ #include #include #include #define SIZE 50 void change(){ system("cls"); struct TX{ char name[10]; char jiguan[20]; char d1[20],d2[20]; char ema[30]; }inf [SIZE]; FILE *fp; char a[20],b[20]; int i,flag=0,n,f=0; fp=fopen("date.dat","rb");//打开二进制文件进行只读; printf("\t\t\t\t\t\t请输入需要修改信息的姓名:"); scanf("%s",a); for(i=0;fread(&inf[i],sizeof(struct TX),1,fp)==1;i++){ if(strcmp(a,inf[i].name)==0){//strcmp为比较函数,若a=inf[i].name则返回0; printf("\t\t\t\t\t\t当前信息:\n"); printf("\t\t\t\t\t\t姓名:%s\n",inf[i].name); printf("\t\t\t\t\t\t籍贯:%s\n",inf[i].jiguan); printf("\t\t\t\t\t\t电话号码1:%s\n",inf[i].d1); printf("\t\t\t\t\t\t电话号码2:%s\n",inf[i].d2); printf("\t\t\t\t\t\t邮箱:%s\n\n\n",inf[i].ema); flag=1; break; } }fclose(fp); fp=fopen("date.dat","rb+"); fseek(fp,i*sizeof(struct TX),0);//将文件指针移到需要改变数据的位置,否则会出错 if(flag==0)printf("\t\t\t\t\t\t输入错误!\n\n\n\n\n") ; if(flag==1){ printf("\t\t\t请输入需要修改的信息:1.姓名 2.籍贯 3.电话号码1 4.电话号码2 5.邮箱 6.不需要继续修改了\n"); printf("\t\t\t\t\t\t修改信息:"); for(;f==0;){ scanf("%d",&n); switch(n){ case 1:printf("\t\t\t\t\t\t将姓名修改为:"); scanf("%s",inf[i].name); printf("\n");break; case 2:printf("\t\t\t\t\t\t将籍贯修改为:"); scanf("%s",inf[i].jiguan);printf("\n");break; case 3:printf("\t\t\t\t\t\t将电话号码1修改为:"); scanf("%s",inf[i].d1);printf("\n");break; case 4:printf("\t\t\t\t\t\t将电话号码2修改为:"); scanf("%s",inf[i].d2);printf("\n");break; case 5:printf("\t\t\t\t\t\t将邮箱修改为:"); scanf("%s",inf[i].ema);printf("\n");break; case 6:f=1;printf("\n\n\n");break; }if(n!=6){ printf("\t\t\t\t\t\t还需修改的信息是:"); fwrite(&inf[i],sizeof(struct TX),1,fp);//将修改后的信息写入文件 } } fclose(fp); } }