下面讨论二进制版较结构体版的不同,优势,两难,改进之处:
不同:
(一)全局变量
结构体版:
struct record users[upNum]; //银行所有用户
int N; //实际的用户数目
二进制版:
int N;
FILE *fp;
全局变量的结构体数组->子函数中定义指向结构体的指针
fp由局部变量->全局变量
(二)main函数
结构体版:
int main()
{
printf("+----------------------+\n");
printf("+ 欢迎光临CSDN银行 +\n");
printf("+----------------------+\n");
if (pass())
{
readData();
work();
writeData();
}
return 0;
}
二进制版:
int main()
{
FILE *fp;
printf("+----------------------+\n");
printf("+ 欢迎光临我家银行 +\n");
printf("+----------------------+\n");
if (pass())
{
exchange(); //将数据从文本文件读到二进制文件
if((fp=fopen("account.bin", "rb+"))==NULL) //文件不存在时重建,文件已经存在时,将保留原数据
{
printf("数据文件打开失败,退出程序....");
exit(1);
}
fseek(fp, 0, SEEK_END);
N = ftell(fp)/sizeof(record); //ftell用于得到文件位置指针当前位置相对于文件首的偏移字节数,除以sizeof(struct record),得到的是当前用户的数目
work();
fclose(fp);
}
return 0;
}