
[英]How to store data in a CSV file to a structure and then return that structure
[英]how to dynamically create an array of structure and store the data in file
我正在写一个通讯录程序。 有插入,显示和删除选项。 插入时,它将获取输入数据并将其存储到文件中。 每当我添加新联系人时,都会将其添加到文件中。 将数据保存到文件后,我可以动态分配一个结构化地址簿数组来存储每个联系人详细信息。 这样,如果我要显示或删除特定联系人,则比打开文件,比较文件中的每个元素要容易。 根据保存到文件中的联系人数量,我们可以为结构地址簿动态分配数组并存储详细信息。
#define FIRST_NAME_LENGTH 15
#define LAST_NAME_LENGTH 15
#define NUMBER_LENGTH 15
#define ADDRESS_LENGTH 15
/* Structure defining a name */
struct Name
{
char lastname[LAST_NAME_LENGTH];
char firstname[FIRST_NAME_LENGTH];
};
/* Structure defining a phone record */
struct addressbook
{
char answer;
struct Name name;
char address[ADDRESS_LENGTH];
char phonenumber[NUMBER_LENGTH];
};
struct addressbook a;
void add_record()
{
printf("enter details\n");
printf("enter lastname of person :\n");
scanf("%s", a.name.lastname);
printf("enter firstname of person :\n");
scanf("%s", a.name.firstname);
printf("enter address of person :\n");
scanf("%s", a.address);
printf("enter phone number of person :\n");
scanf("%s", a.phonenumber);
if((fp = fopen(filename,"a+")) == NULL){
printf("Error opening %s for writing. Program terminated.\n", filename);
abort();
}
fwrite(&a, sizeof(a), 1, fp); /* Write to the file */
fclose(fp); /* close file */
printf("New record added\n");
}
您的通讯录应该包含一个联系人列表。 因此,最好不要将其与特定的“联系方式”弄混。 更好的方法是:
struct Contact
{
struct Name name;
char address[ADDRESS_LENGTH];
char phonenumber[NUMBER_LENGTH];
};
在AddressBook结构中,您可以将Struct Contact对象存储为链表或数组(如果需要,可以动态增长)。
struct AddressBook
{
Contact *contacts[MAX_CONTACTS];
}
每次读取数据时,将其存储到新的Contact
对象中,并将指向该对象的指针存储在数组中。 但是,如果没有大量联系人,则不建议将所有联系人存储在内存中,而是可以对文件进行一些二进制搜索,并仅读取所需的联系人块。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.