当我将文件中的信息读入我的电话簿程序并尝试通过联系人列表查看时,第一次尝试查看时列表为空白,但如果您选择再次查看,文件中的内容就在那里. 更奇怪的是,当您通过程序添加名称时,该名称会与文件数据一起显示一次,但如果您再次检查,新名称就消失了。如果您删除一个姓名,它会删除一次,但如果您再次检查联系人列表,该姓名会恢复。我不知所措。这是我的读取功能和打印功能。
void file2(fr*friends ,int* counter, int i,char buffer[],FILE*read,char user_entry3[])
{
int len;
fr temp;
*counter=0;
i=0;
fseek(read, 0, SEEK_SET);
while (fgets(buffer, 80, read) != NULL) {
temp.First_Name=malloc(36); //was j+1
temp.Last_Name=malloc(36); //strlen(buffer));
sscanf(buffer,"%s %s",temp.First_Name,temp.Last_Name);
fgets(buffer, 20, read);
len=strlen(buffer);
if(buffer[len-1]=='\n')
buffer[len-1]='\0';
temp.home=malloc(20); //len);
strcpy(temp.home, buffer);
fgets(buffer, 20, read);
len=strlen(buffer);
if(buffer[len-1]=='\n')
buffer[len-1]='\0';
temp.cell=malloc(20); //len);
strcpy(temp.cell, buffer);
friends[i].First_Name=malloc(MAXNAME);
friends[i].Last_Name=malloc(MAXNAME);
friends[i].home=malloc(MAXPHONE);
friends[i].cell=malloc(MAXPHONE);
if(!friends[i].First_Name || !friends[i].Last_Name || !friends[i].home || !friends[i].cell) {
printf("\nmalloc() failed!\n");
getchar();
return;
}
strcpy(friends[*counter].First_Name,temp.First_Name);
strcpy(friends[*counter].Last_Name,temp.Last_Name);
strcpy(friends[*counter].home,temp.home);
strcpy(friends[*counter].cell,temp.cell);
(*counter)++;
i++;
}
//fclose(read);
free(temp.Last_Name);
free(temp.First_Name);
free(temp.home);
free(temp.cell);
}
void print_contact(fr*friends ,int* counter, int i,char buffer[],char user_entry3[50],FILE*read) {
for( i = 0; i < *counter; i++)
if (strlen(friends[i].First_Name) && strlen(friends[i].Last_Name)&& strlen(friends[i].home)&& strlen(friends[i].cell ))
{
getFirst(friends, i);
getLast(friends, i);
getHome(friends, i);
getCell(friends, i);
}
file2(friends ,counter,i,buffer,read,user_entry3);
}
这很奇怪,因为它就像程序完美运行一次,但之后就不行了。