【发布时间】:2015-04-09 19:01:32
【问题描述】:
我有这个文件,我尝试使用结构从中读取联系人以获得简单的通讯录。
typedef struct contact{
char name[80];
char surname[80];
char cellnumber[20];
float length;
int contactid;
}contact;
我使用这个函数,我这样称呼它,所以它读取了 200 次 (const int MAXCONTACT = 200;)。
for(i2=0;i2<MAXCONTACT;i2++)
person[i2]=load(i2);
这是给定一个ID(变量i)的函数,返回具有相同I的联系人:
contact load(int i){
struct contact person;
FILE *data;
data=fopen("data.bin","rb");
do{
fread(&person,sizeof(contact),1,data);
}while(person.contactid!=i);
fclose(data);
return person;
}
这种代码的唯一问题是,当没有 200 个联系人时,该函数不会返回联系人,因为找不到联系人 ID。
我想到了一些解决方案,但它们相当复杂,我想知道它们是否可以做得更好。
制作一个像真正的安装程序一样创建文件的安装程序,然后创建 200 个未声明的联系人,其变量等于 null。
检查程序是否是第一次运行,并仅在程序本身中执行与上述相同的操作。
如果未找到联系人 ID,则同样退出搜索循环并返回所有变量设置为 null 的未清除联系人。
写完之后,想到三个问题:
其中哪一个是最好的或最容易使用的?
返回未清除的联系人是否安全? (我必须记住,我必须使用联系人:modefy,打印,打印所有联系人)
我是否应该有一个结构和文件来写下联系人结构/文件中未使用的变量的一些统计信息?
【问题讨论】:
-
始终检查
fread结果,无论选择何种方法。至于“返回未清除的联系人是否安全?”,当然,如果您知道如何处理的话。一切尽在您的掌控之中。 -
然后.. 打开文件并搜索 id,然后关闭 each 联系人 id??有点……尴尬,说话温和。
-
@EugeneSh。没错,我可以写一些 if 来检查变量中是否有内容
-
@EugeneSh。那我该怎么做呢?
-
打开文件,逐个读取联系人,填充数组,关闭文件。