你能告诉我我做错了吗......为什么它不能正常工作?
这是我的二进制保存文件:
int SaveToBinary(FILE *fp,struct node *kvartiras){
int l;
struct node *tmp=NULL;
for(tmp=kvartiras; tmp; tmp = tmp->next){
l=fwrite(&(tmp->s),1,sizeof(Kvartira),fp);
if (l != (sizeof(Kvartira))) {
printf("\nгрешка - неуспешно записване на данните !");
return 1;
}
}
system("cls");
return 0;
}
从二进制文件中读取:
struct node * ReadBinary(FILE *fp,struct node *kvartiras){
struct node *tmp=NULL;
struct node *tmp2=NULL;
int l;
if((kvartiras) && (kvartiras->next)) {
*tmp = *kvartiras;
*tmp2 = *kvartiras->next;
}
while(tmp2) {
free(tmp);
tmp=tmp2;
tmp2 = tmp2->next;
}
rewind(fp);
while(!feof(fp))
{
tmp=(struct node*) malloc(sizeof(struct node));
if(!tmp){
printf("\nГрешка при заделяне на паметта !\n");
return kvartiras;
}
l=fread(&(tmp->s),1,sizeof(Kvartira),fp);
if (l != (sizeof(Kvartira)))
{
free(tmp);
return kvartiras;
}
tmp->next=kvartiras;
kvartiras=tmp;
}
return kvartiras;
}
这是我使用的案例:
case 6:
if(kvartiras){
for(i=0;i<256;i++) check[i]='\0';
fflush(stdin);
printf("\nВъведете име на файл:");
scanf_s("%s",check);
fp_out= fopen(check,"wb");
if(fp_out)
{
if(!(SaveToBinary(fp_out,kvartiras))){
//-- извикване на ф-я за запис на данните в двоичен файл --
printf("\nданните са записани във файл <%s> успешно !",check);
if(fp_out) fclose(fp_out);
}
}else printf("\nгрешка - неуспешно създаване на файла !");
}else printf("\nгрешка - базата данни е празна !");
break;
case 7:
for(i=0;i<256;i++) check[i]='\0';
fflush(stdin);
printf("\nВъведете име на файл:");
scanf_s("%s",check);
fp_in=fopen(check,"rb");
if(fp_in){
kvartiras=ReadBinary(fp_in,kvartiras);
//-- извикване на ф-я за прочитане на данни от двоичен файл --
if(kvartiras) printf("\nданните са прочетени успешно !");
if(fp_in) fclose(fp_in);
}else printf("\nгрешка - неуспешно създаване на файла !");
break;
}
}while (mode != 8 );
return 0;
}
结构:
typedef struct {
int kod;
char adres[51];
int plo6t;
int stai;
int naem;
} Kvartira;
struct node {
Kvartira s;
struct node *next;
};
答案 0 :(得分:0)
可能有一个错误:
if (l != (sizeof(Kvartira)))
这将永远是真的,sizeof(Kvartira)至少是sizeof(int)* 4 + 51。