c语言对结构体的读取与写入

来源:互联网 发布:java h5微信支付demo 编辑:程序博客网 时间:2024/06/05 06:01
#include <stdio.h>#define SAVE_PATH "./student.data"typedef struct student{char name[10];int id;char addr[20];}student;void write_msg(const student* s,int len){#define _BIN_WRFILE* fp;int i = 0;#ifdef _BIN_WRfp = fopen(SAVE_PATH,"rb+");if(NULL == fp){fp = fopen(SAVE_PATH,"wb+");}fseek(fp,0,SEEK_END);while(i<len){fwrite(s+i,sizeof(student),1,fp);i++;}#elsefp = fopen(SAVE_PATH,"r+");if(NULL == fp){fp = fopen(SAVE_PATH,"w+");}fseek(fp,0,SEEK_END);while(i<len){fprintf(fp,"%-7s%-3d%-7s\n",(s+i)->name,(s+i)->id,(s+i)->addr);i++;}#endiffclose(fp);}void read(){FILE* fp;student s;#ifdef _BIN_WRfp =fopen(SAVE_PATH,"rb");if(NULL == fp){perror("open fail");return;}while(1==fread(&s,sizeof(student),1,fp)){printf("%s %d %s\n",s.name,s.id,s.addr);}#elsefp = fopen(SAVE_PATH,"r");if(NULL == fp){perror("open fail");}while(!feof(fp)){fscanf(fp,"%s %d %s\n",s.name,&s.id,s.addr);printf("%s %d %s\n",s.name,s.id,s.addr);}#endiffclose(fp);}int main(){student s[2]={{"ylk",111,"wuhan"},{"ylk2",222,"wuhan"}};write_msg(s,2);read();return 0;}

原创粉丝点击